`
tangweiye
  • 浏览: 150889 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

android 拖动图片移动效果

 
阅读更多

java代码

package com.twy.test;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class TestDemo extends Activity {
	private ImageView img1;
	private ImageView img2;
	private int screenWidth;
	private int screenHeight;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		img1 = (ImageView) findViewById(R.id.imageView1);
		img2 = (ImageView) findViewById(R.id.imageView2);

		DisplayMetrics dm = getResources().getDisplayMetrics();
		screenWidth = dm.widthPixels;
		screenHeight = dm.heightPixels - 50;

		img1.setOnTouchListener(movingEventListener);
		img2.setOnTouchListener(movingEventListener);

	}

	private OnTouchListener movingEventListener = new OnTouchListener() {
		int lastX, lastY;

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:
				lastX = (int) event.getRawX();
				lastY = (int) event.getRawY();
				break;
			case MotionEvent.ACTION_MOVE:
				int dx = (int) event.getRawX() - lastX;
				int dy = (int) event.getRawY() - lastY;

				int left = v.getLeft() + dx;
				int top = v.getTop() + dy;
				int right = v.getRight() + dx;
				int bottom = v.getBottom() + dy;
				// 设置不能出界
				if (left < 0) {
					left = 0;
					right = left + v.getWidth();
				}

				if (right > screenWidth) {
					right = screenWidth;
					left = right - v.getWidth();
				}

				if (top < 0) {
					top = 0;
					bottom = top + v.getHeight();
				}

				if (bottom > screenHeight) {
					bottom = screenHeight;
					top = bottom - v.getHeight();
				}

				v.layout(left, top, right, bottom);

				lastX = (int) event.getRawX();
				lastY = (int) event.getRawY();

				break;
			case MotionEvent.ACTION_UP:
				break;
			}
			return true;
		}
	};
}

 

 xml 代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<RelativeLayout android:id="@+id/relativeLayout1"
		android:layout_width="fill_parent" android:layout_height="fill_parent">
		<ImageView android:id="@+id/imageView1"
			android:layout_width="wrap_content" android:background="@drawable/icon"
			android:layout_height="wrap_content" android:layout_alignParentLeft="true"></ImageView>
		<ImageView android:id="@+id/imageView2"
			android:layout_width="wrap_content" android:background="@drawable/icon"
			android:layout_height="wrap_content" android:layout_toRightOf="@+id/imageView1"
			android:layout_alignTop="@+id/imageView1" android:layout_alignBottom="@+id/imageView1"></ImageView>
	</RelativeLayout>

</LinearLayout>

 

 

其中 在onTouch 代码中 如果返回 false 就不能捕捉到ACTION_MOVE 事件。

 对于onTouchEvent 中onTouch返回值

1 、如果return false 说明还没有消费onTouch事件,在执行onTouch里代码后,onTouch事件并没有结束。

2、如果return true 说明消费了onTouch事件 onTouch事件结束了

但在实际操作中 除了ACTION_DOWN事件以外,其余的事件只有返回true的那个方法才能捕捉到。所以 返回false的时候只能捕捉到每次的第一个DOWN事件 后面的MOVE 和UP事件就捕捉不到了。

 

DisplayMetics 类:

Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。

为了获取DisplayMetrics 成员,首先初始化一个对象如下:

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics; 

//getWindowManager() 获取显示定制窗口的管理器
//getDefaultDisplay() 获取默认显示Display对象
//getMetrics(dm) 通过Display对象的数据来初始化一个DisplayMetrics对象

 v.layout(left, top, right, bottom);

Assign a size and position to a view and all of its descendants

This is the second phase of the layout mechanism. (The first is measuring). In this phase, each parent calls layout on all of its children to position them. This is typically done using the child measurements that were stored in the measure pass(). Derived classes with children should override onLayout. In that method, they should call layout on each of their their children.

Parameters:
l Left position, relative to parent
t Top position, relative to parent
r Right position, relative to parent
b Bottom position, relative to parent

 

  • 大小: 19.9 KB
分享到:
评论
1 楼 qq3061280 2014-06-14  
 

相关推荐

    Android_图片拖动效果

    在Android开发中,实现图片拖动效果是一项基本且有趣的功能,它可以带给用户直观、互动的体验。本教程将深入探讨如何在Android应用中创建类似iPhone的图片拖动效果。 首先,我们需要了解Android中的触摸事件处理...

    android 图片拖拽效果

    这个"android 图片拖拽效果"项目提供了一个详细实现图片拖动功能的源码,使用者可以将其直接导入到自己的Android项目中进行研究和使用。 在Android中,实现图片拖拽通常涉及到以下几个关键知识点: 1. **...

    Android 可拖拽移动的RecyclerView

    总之,通过结合RecyclerView、ItemTouchHelper和自定义Adapter,我们可以轻松实现Android应用中的可拖拽移动列表。这个功能增强了用户的交互体验,使得数据排序变得更加直观和便捷。在实际开发中,根据项目需求,你...

    Android下图片移动的demo

    在Android中,通常使用`ImageView`组件来展示静态图片,而动态移动图片则需要利用`Canvas`和`Bitmap`。`Bitmap`是Android中用于存储图像数据的对象,而`Canvas`则提供了一个画布,允许开发者在其上进行绘图操作,...

    android图片拖动改变位置

    总之,Android中的图片拖动和位置改变涉及到自定义视图、事件处理、数据适配器的更新以及可能的动画效果。通过以上步骤,你可以创建一个交互性强、用户体验良好的图片网格应用。记得在开发过程中,不断优化代码,...

    android 拖拽图片 拖动浮动按钮到处跑

    对于拖拽图片的效果,可以创建一个名为`DragSample01`的Activity,与拖动浮动按钮类似,只需要替换视图类型为ImageView,并设置其布局。在`onTouch`方法中,我们可以使用相同的方式来处理图片的拖动: ```java img ...

    Android开发之google源码——图片拖拽效果的实现

    在Android应用开发中,实现图片拖拽效果是一个常见的需求,特别是在设计交互丰富的用户界面时。本文将基于提供的“Android开发之google源码——图片拖拽效果的实现”资源,深入探讨如何在Android平台上创建这样的...

    Android 拖动图片及图层叠加

    在Android开发中,实现拖动...总的来说,Android拖动图片和图层叠加是通过监听触摸事件、调整视图位置和层级,以及正确地处理图像资源来实现的。理解并掌握这些技术,对于开发具有丰富交互特性的Android应用至关重要。

    Android图片裁剪----移动、缩放图片进行裁剪

    2. 使用Matrix的setTranslate方法来移动图片。该方法接受两个参数,分别代表X轴和Y轴上的偏移量。 3. 在触摸事件中获取用户的滑动距离,并更新Matrix,然后调用ImageView的setImageMatrix方法来更新显示。 缩放图片...

    Android 图片移动

    这个"Android 图片移动"的功能,主要是让用户能够通过触摸屏幕,拖动图片在界面上自由移动,实现一种交互式的用户体验。以下是一些关于实现这一功能的关键知识点: 1. **ImageView**: 图片显示的基本组件是`...

    Android 微信朋友圈图片拖拽功能Demo

    ACTION_MOVE事件则用来更新图片的新位置,需要将屏幕坐标转换为视图坐标,然后根据偏移量移动图片。 3. **平滑滚动**:为了使拖动体验更加流畅,可以使用Scroller类或ObjectAnimator实现平滑的动画效果。当手指抬起...

    Android 双指拖动和双指缩放图片

    在Android开发中,实现双指拖动和双指缩放图片是常见的手势识别应用场景,尤其在图片查看器或画板类应用中极为常见。本文将深入探讨如何在Android平台上实现这一功能,以及如何将绘制的线条与背景图片进行正片叠底的...

    android拖拽效果仿zaker 优化性能版本

    在Android开发中,实现类似Zaker的拖拽效果是一项挑战性的任务,特别是在追求高性能和流畅度的同时。这个“android拖拽效果仿zaker 优化性能版本”项目旨在提供一种优化的解决方案,使得用户在浏览内容时能享受到...

    Android 图片可拖拽排序

    在本案例中,提及的是一个名为“android-drag-square-master”的项目,它可能是一个开源库或示例代码,用于演示如何实现图片拖拽排序的效果,其特点是流畅性较高。 要实现这样的功能,开发者通常会使用GridView或者...

    android 图片,按钮移动

    在Android开发中,实现按钮或图片的移动效果是一项常见的需求,尤其在创建交互式用户界面时。本篇文章将深入探讨如何让Android应用中的按钮或图片跟随用户的触摸手势自由移动。 首先,我们需要理解Android中的触控...

    Android按钮拖拽效果

    在Android开发中,实现按钮的拖拽效果可以极大地提升用户界面的交互性和用户体验。这篇文章将深入探讨如何在GridView中创建一个可拖动的按钮,以及实现这一效果的关键技术和步骤。 首先,我们需要理解Android中的...

    SurfaceView实现图片缩放,移动加标记

    在用户进行 pinch-to-zoom(双指捏合缩放) 和 drag-to-move(拖动移动)操作时,更新`Matrix`的scale和translate属性。`onTouchEvent`方法可以捕获用户的触摸事件,根据事件类型更新缩放因子和偏移量,然后应用到`...

    Android实现图片顺时逆时旋转及拖拽显示效果

    在Android开发中,实现图片的顺时针和逆时针旋转以及拖拽显示效果是一项常见的需求,这在各种应用中都有广泛的应用,如照片编辑、游戏界面等。本篇文章将详细探讨如何在Android环境中实现这一功能。 首先,我们需要...

    android listview 拖拽效果

    "android listview 拖拽效果"是指在ListView上实现的一项高级功能,允许用户通过手势拖动ListView中的每个条目(item)来改变它们的位置,提供了一种直观且交互性强的用户体验。在本篇文章中,我们将深入探讨如何...

    android实现拖拽图片的操作

    在Android开发中,拖拽操作是一项常见的用户交互功能,尤其在设计图形界面或者处理图片时。本教程将探讨如何在Android应用中实现拖拽图片的功能,同时也会涉及到`Observable`与`Observer`模式的运用,这是Java编程中...

Global site tag (gtag.js) - Google Analytics