Android应用开发之实现图片的拖拽显示
2012-02-29 19:22
633 查看
OnTouchListener
OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。该接口中的监听方法签名如下。
Java代码:
public boolean onTouch(View v, MotionEvent event)
参数v:参数v同样为事件源对象。
参数event:参数event为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息
Matrix
Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。例如,要将一个图片旋转30度,然后平移到(100,100)的地方,那么可以这样做:
实验
实验图片的拖拽显示。
布局
Activity:
OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。该接口中的监听方法签名如下。
Java代码:
public boolean onTouch(View v, MotionEvent event)
参数v:参数v同样为事件源对象。
参数event:参数event为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息
Matrix
Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。例如,要将一个图片旋转30度,然后平移到(100,100)的地方,那么可以这样做:
Matrix m = new Matrix(); m.postRotate(30); m.postTranslate(100, 100);
实验
实验图片的拖拽显示。
布局
<ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/imageView" android:src="@drawable/cl" android:scaleType="matrix" />
Activity:
… private void init() { imageView = (ImageView) this.findViewById(R.id.imageView); imageView.setOnTouchListener(new ImageViewOnTouchListener()); } private final class ImageViewOnTouchListener implements OnTouchListener{ PointF startPoint = new PointF(); Matrix matrix = new Matrix(); public boolean onTouch(View v, MotionEvent event) { // Log.i("TAG", String.valueOf(event.getX()) + " " +String.valueOf(event.getY())); switch(event.getAction() & MotionEvent.ACTION_MASK){ // MotionEvent.ACTION_MASK=0xff case MotionEvent.ACTION_DOWN: startPoint.set(event.getX(), event.getY()); break; case MotionEvent.ACTION_MOVE://移动过程,该事件会不断被触发 float dx = event.getX()-startPoint.x; float dy = event.getY()-startPoint.y; matrix.postTranslate(dx, dy); startPoint.set(event.getX(), event.getY()); break; case MotionEvent.ACTION_POINTER_DOWN://如果已经有手指压住屏幕, 再有手指压下屏幕,就会触发该事件 break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP://有手指离开屏幕,但还有手指 压住屏幕,就会触发该事件 break; } imageView.setImageMatrix(matrix); return true; } } …
相关文章推荐
- android利用定时器实现应用开头加载图片或者静态广告的显示
- Android开发之实现图片自动滚动显示标签的ViewPager
- Android应用开发之图片热点效果实现
- Android应用开发之图片热点效果实现
- Android实现图片顺时逆时旋转及拖拽显示效果
- android开发实现下载网页图片到本地并显示
- android开发 实现同时显示png/jpg 等bitmap图片还可以显示gif图片,有效防止OOM
- Android自定义View实现图片显示,并实现缩放、拖拽、切换功能
- Android实现图片顺时逆时旋转及拖拽显示效果
- Android中实现图片的拖拽显示
- IOS应用开发14——使用UICollectionView实现图片列表显示
- Android应用开发之(利用好图片缓存)
- android应用开发-从设计到实现 3-8 静态原型的Appbar折叠
- Android开发--Matrix(二)--实现图片的旋转
- [Android开发] 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)
- Android相机开发(一)之预览拍照查看图片基本功能的实现
- 怪胎:Android开发ImageView图片无法显示
- Android开发教程:实现没有标题栏的窗口和全屏显示
- Android应用开发欢迎界面不想显示最上面的LOGO
- Android 开发实现EditText 光标居右显示