Android多点触摸交互处理

原创 2015年11月20日 16:01:46

在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;
    }

android 多点触摸交互处理

今天介绍一下多点触摸交互处理,过程中会有几个小demo。首先,我为什么要有学习这块呢?因为他涉及到图片的缩放啊,类似的一些操作,现在的app都必不可少。要想做图片的缩放,首先要知道手指在哪里。   ...
  • yx1166
  • yx1166
  • 2016年10月16日 20:02
  • 119

解析Android 中多点触摸的实现方法

多点触摸(MultiTouch),指的是允许计算机用户同时通过多个手指来控制图形界面的一种技术。与多点触摸技术相对应的就是单点触摸,单点触摸的设备已经有很多年了,小尺寸的有触摸式的手机,大尺寸的最常见...
  • qq_35600588
  • qq_35600588
  • 2016年09月08日 10:45
  • 390

Android多点触摸交互处理-图片缩放

创建一个新工程LearnMultipointTouich一个空的Activity,方式一个ImageView和一个Checkbox控件 实现目标:如果Checkbox打勾这移动图片;否则缩放图片。 ...
  • caizhigui
  • caizhigui
  • 2015年12月09日 14:00
  • 327

多点触摸交互处理,放大缩小

package com.example.multouch; import android.app.Activity; import android.os.Bundle; import android...
  • u013636377
  • u013636377
  • 2014年12月14日 12:44
  • 343

android开发之多点触摸交互处理

懒惰,只是为了更好地懒惰!
  • zz1175854992
  • zz1175854992
  • 2015年03月27日 11:52
  • 722

【Android知识点精讲】(14)多点触摸交互处理

一 触摸事件监听 RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl); rl.setOnTouchListener(new O...
  • scarthr
  • scarthr
  • 2015年01月05日 22:39
  • 923

[学习笔记]Android系统功能之多点触摸交互处理

以下内容纯粹为本人学习笔记【记录】之用,所听课程(Q群群友百度网盘提供)为极客学院一位老师所讲(老师大名我尚未知晓),如有侵权请告知。在此特别感谢这位老师录制的视频资料。1、触摸事件监听 MainA...
  • weixin_38256474
  • weixin_38256474
  • 2017年06月04日 12:05
  • 200

Android多点触摸交互处理,放大缩小图片

多点触摸(MultiTouch),指的是允许计算机用户同时通过多个手指来控制图形界面的一种技术。与多点触摸技术相对应的就是单点触摸,单点触摸的设备已经有很多年了,小尺寸的有触摸式的手机,大尺寸的最常见...
  • agonie201218
  • agonie201218
  • 2015年04月25日 22:44
  • 629

Android单点触摸与多点触摸

先测试单点触摸事件,它适用于所有android版本。我们在视图中注册一个OnTouchListener接口,并把触摸时间传递给这个接口实现。OnTouchListener接口只有一个方法:public...
  • G_MuHan
  • G_MuHan
  • 2017年07月08日 21:54
  • 184

cocos2d3.x android和ios屏蔽多点触摸

ios屏蔽多点触摸比较简单,在 AppController.mm 中添加一下代码: [eaglView setMultipleTouchEnabled:YES] 设置为 NO,就是单点触摸。这样就不用...
  • wpj0304
  • wpj0304
  • 2017年03月16日 10:24
  • 1162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android多点触摸交互处理
举报原因:
原因补充:

(最多只允许输入30个字)