在FrameLayout中学习Android的单点和多点触摸交互,并实现图像拖拽移动,放大和缩小。

单点触摸
即为view设置监听事件setOnTouchListener,通过MotionEvent event获得触摸的相关操作,如event.getAction()获取触摸的动作,event.getX(),event.getY()分别获取触摸点的坐标。

        View view = inflater.inflate(R.layout.fragment_touch, container, false);        view.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                switch (event.getAction()) {                    case MotionEvent.ACTION_DOWN:                        System.out.println("ACTION_DOWN");                        break;                    case MotionEvent.ACTION_MOVE:                        System.out.println("ACTION_MOVE");                         System.out.println(String.format("X:%f,Y:%f", event.getX(), event.getY()));                        break;                    case MotionEvent.ACTION_UP:                        System.out.println("ACTION_UP");                        break;                }                return true;

}

多点触摸
只要使用event.getPointerCount()就能得到触摸点的个数。多个触摸点的坐标也可以通过event.getX(int index),event.getX(int index)获取,index从0开始。

图像拖拽移动,放大和缩小。
我们利用event的相关操作获取触摸点的信息并将它通过layoutParams传递给图片参数设置,从而控制图像的位置大小,达到移动,放大和缩小。

   @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        // Inflate the layout for this fragment        View view = inflater.inflate(R.layout.fragment_touch, container, false);        iv_move = (ImageView) view.findViewById(R.id.iv_move);        tv_xy= (TextView) view.findViewById(R.id.tv_xy);        view.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                switch (event.getAction()) {                    case MotionEvent.ACTION_DOWN:                        System.out.println("ACTION_DOWN");                        break;                    case MotionEvent.ACTION_MOVE:                        System.out.println("ACTION_MOVE");//                        System.out.println(String.format("X:%f,Y:%f", event.getX(), event.getY()));//                        System.out.println(event.getPointerCount());                        tv_xy.setText(String.format("X:%f,Y:%f", event.getX(), event.getY()));                        layoutParams = (FrameLayout.LayoutParams) iv_move.getLayoutParams();//                        layoutParams.setMargins((int) event.getX(),(int) event.getY(),0,0);                        if (event.getPointerCount()>=2) {                            float offsetX = event.getX(0) - event.getX(1);                            float offsetY = event.getY(0) - event.getY(1);                            currentdistance = (float) Math.sqrt(offsetX * offsetX + offsetY * offsetY);                            if (lastdistance < 0) {                                lastdistance = currentdistance;                            } else if (lastdistance - currentdistance < 5) {                                System.out.println("放大");                                layoutParams.width = (int) (iv_move.getWidth() *1.05f);                                layoutParams.height = (int) (iv_move.getHeight() * 1.05f);                                lastdistance = currentdistance;                            } else if (lastdistance - currentdistance > 5) {                                System.out.println("缩小");                                layoutParams.width = (int) (iv_move.getWidth() *0.95f);                                layoutParams.height = (int) (iv_move.getHeight() * 0.95f);                                lastdistance = currentdistance;                            }                        }                        iv_move.setLayoutParams(layoutParams);                        break;                    case MotionEvent.ACTION_UP:                        System.out.println("ACTION_UP");                        break;                }                return true;            }        });        return view;    }

更多相关文章

  1. Android中的基础----在按钮上显示图像的方式
  2. 初学Android,图形图像之使用Path类(二十六)
  3. android Shader类简介_渲染图像示例
  4. Android Opencv 410 集成 以及 jni环境配置 图像 处理个人总结
  5. android 对图像进行矩阵变换(Martix)的使用笔记
  6. android Shader类简介_渲染图像
  7. android图像绘制(一)——镜像问题
  8. Android图像处理简介の使用内置Camera应用程序进行图像捕获
  9. Android实战经验之图像处理及特效处理的集锦(总结版)

随机推荐

  1. 详解 Mysql中的delimiter定义及作用
  2. mysql server 8.0.3安装配置方法图文教程
  3. mysql 8.0.12 winx64下载安装教程
  4. RHEL7.5下mysql 8.0.11安装教程
  5. Linux下mysql 8.0安装教程
  6. CentOS 6、7下mysql 5.7 详细安装教程
  7. linux下mysql忘记密码的解决方法
  8. CentOS 7下mysql 5.7 安装教程
  9. MySQL错误代码1862 your password has ex
  10. CentOS 7安装MySQL的详细步骤