您的位置:首页 > 移动开发 > Android开发

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>

 

效果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息