下面介绍一下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;

       }  

    }

}

 布局文件:

"http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

 

   

        android:id="@+id/imageView"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:src="@drawable/a"

        android:scaleType="matrix" />

 

效果:

更多相关文章

  1. 记录android应用程序使用的次数 android学习(五)
  2. Android(安卓)屏幕适配(values、drawable适配)
  3. Android(安卓)Density(密度)
  4. 【Android】ListView RecyclerView
  5. 基于Android小说阅读器滑动效果的一种实现
  6. Android(安卓)屏幕自适应
  7. android 开发之切换landscape屏幕
  8. android 自动调整屏幕分辨率
  9. Android最全的屏幕适配

随机推荐

  1. 关于数据库优化问题收集汇总
  2. 一个完整的SQL SERVER数据库全文索引的示
  3. SQL Server 查询处理中的各个阶段(SQL执
  4. 安装sql server 2008 management提示已安
  5. MSSQL数据库占用内存过大造成服务器死机
  6. SQL分组排序去重复的小实例
  7. SQLServer导出数据到MySQL实例介绍
  8. 在SQL Server的try...catch语句中获取错
  9. 解析:清除SQL被注入恶意病毒代码的语句
  10. 解析SQLServer任意列之间的聚合