Android中实现图片的拖拽显示
2012-09-15 23:05
375 查看
下面介绍一下Android中的图片的拖拽
首先介绍处理手机的屏幕事件监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。
OnTouchListener
public boolean onTouch(View v, MotionEvent event)
Matrix
Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。
实现图片的移动:
Activity中的文件代码:
public class MyDragTestActivity extends Activity {
ImageView imageView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
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 m = new Matrix();
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()&MotionEvent.ACTION_MASK){
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;
m.postTranslate(dx, dy);
//将当前坐标保存为新起点
startPoint.set(event.getX(),event.getY());
break;
case MotionEvent.ACTION_UP://指点杆离开屏幕
break;
case MotionEvent.ACTION_POINTER_UP://有手指离开屏幕,但还有手指压住屏幕,就会触发事件
break;
case MotionEvent.ACTION_POINTER_DOWN://如果已经有手机压在屏幕上,又有手指压在屏幕上了,多点触摸的意思
break;
}
imageView.setImageMatrix(m);
return true;
}
}
}
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/a"
android:scaleType="matrix" />
</LinearLayout>
效果:
首先介绍处理手机的屏幕事件监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。
OnTouchListener
public boolean onTouch(View v, MotionEvent event)
Matrix
Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。
实现图片的移动:
Activity中的文件代码:
public class MyDragTestActivity extends Activity {
ImageView imageView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
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 m = new Matrix();
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()&MotionEvent.ACTION_MASK){
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;
m.postTranslate(dx, dy);
//将当前坐标保存为新起点
startPoint.set(event.getX(),event.getY());
break;
case MotionEvent.ACTION_UP://指点杆离开屏幕
break;
case MotionEvent.ACTION_POINTER_UP://有手指离开屏幕,但还有手指压住屏幕,就会触发事件
break;
case MotionEvent.ACTION_POINTER_DOWN://如果已经有手机压在屏幕上,又有手指压在屏幕上了,多点触摸的意思
break;
}
imageView.setImageMatrix(m);
return true;
}
}
}
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/a"
android:scaleType="matrix" />
</LinearLayout>
效果:
相关文章推荐
- Android实现图片顺时逆时旋转及拖拽显示效果
- Android自定义View实现图片显示,并实现缩放、拖拽、切换功能
- Android应用开发之实现图片的拖拽显示
- Android实现图片顺时逆时旋转及拖拽显示效果
- android 实现图标 (图片)拖拽移动
- android自定义View实现图片上传进度显示(仿手机QQ上传效果)
- 基于Android实现保存图片到本地并可以在相册中显示出来
- Android编程实现压缩图片并加载显示的方法
- Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果
- Android显示网络图片相关实现方法浅谈
- FileReader (三) - 网页拖拽并预显示图片简单实现
- Android中TextView显示插入的图片实现方法
- Android之图片浮动随意拖拽的效果实现
- Android 实现长按录音获取实时音量显示图片(类似微信)
- android 文字叠加显示在图片之上控件的实现 -- 充分利用TextView
- Android 通过开源框架实现加载网络图片并下载到SD卡通知系统相册显示,(并实现分享图片功能)
- Android实现从网络获取图片显示并保存到SD卡的方法
- Android图片显示之通过handler机制实现数据通讯
- android图片浏览器(二)——实现显示图片的标题
- Android实现自适应图片和字体显示