2 fbyfbyfby fbyfbyfby 于 2015.07.02 01:49 提问

求教Android多点触控屏幕显示触摸点的问题

想试试Android的多点触控,三根手指依次瞬间按下屏幕(按下的手指不抬起,最后同时抬起),需求是在按下的地方同时显示水波纹,现在这个代码执行起来只是在第一根手指按下的地方显示水波纹,请各位大神指教。

```package com.waterwave;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class MultWave extends View {

private ArrayList<myWave> list;

private boolean isRuning;

public MultWave(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
    initView();
}

private void initView() {
    // TODO Auto-generated method stub
    list = new ArrayList<MultWave.myWave>();

}

public MultWave(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    initView();
}

private class myWave {
    int cx;
    int cy;
    Paint paint;
    int r;

}

private Handler handler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        flushData();
        invalidate();
        if (isRuning) {
            handler.sendEmptyMessageDelayed(0, 50);
        }
    }

};

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // TODO Auto-generated method stub
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

protected void flushData() {
    // TODO Auto-generated method stub
    for (int i = 0; i < list.size(); i++) {
        myWave wave = list.get(i);
        int alpha = wave.paint.getAlpha();
        if (alpha == 0) {
            list.remove(i);
            continue;
        }
        alpha -= 5;
        if (alpha < 5) {
            alpha = 0;
        }
        wave.paint.setAlpha(alpha);
        wave.r += 3;
        wave.paint.setStrokeWidth(wave.r / 3);

    }
    if (list.size() == 0) {
        isRuning = false;
    }

}

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    for (int i = 0; i < list.size(); i++) {
        myWave wave = list.get(i);
        canvas.drawCircle(wave.cx, wave.cy, wave.r, wave.paint);

    }

}

@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub

    switch (event.getAction() & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_POINTER_DOWN:

        int x = (int) event.getX();
        int y = (int) event.getY();
        addPoint(x, y);

        break;
    case MotionEvent.ACTION_DOWN:

        int x1 = (int) event.getX();
        int y1 = (int) event.getY();
        addPoint(x1, y1);
        break;

    }
    return true;
}

private void addPoint(int x, int y) {
    // TODO Auto-generated method stub
    if (list.size() == 0) {
        add2list(x, y);
        isRuning = true;
        handler.sendEmptyMessageDelayed(0, 200);

    } else {

        add2list(x, y);

    }
}

private void add2list(int x, int y) {
    // TODO Auto-generated method stub
    myWave wave = new myWave();
    wave.cx = x;
    wave.cy = y;
    wave.paint = new Paint();
    wave.paint.setAntiAlias(true);
    wave.paint.setAlpha(255);
    wave.paint.setStyle(Style.STROKE);
    wave.paint.setColor(Color.GREEN);
    list.add(wave);
}

}


4个回答

Trent1985
Trent1985   2015.07.02 11:39
已采纳

@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub

switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_POINTER_DOWN:

    int x = (int) event.getX();
    int y = (int) event.getY();
    addPoint(x, y);

    break;
case MotionEvent.ACTION_DOWN:

    int x1 = (int) event.getX();
    int y1 = (int) event.getY();
    addPoint(x1, y1);
    break;

}
return true;

}你这个是单点触摸的程序,所以只会相应第一个手指按下,你要改为多点相应的.

bdmh
bdmh   Ds   Rxr 2015.07.02 08:44

addPoint方法中,只有第一次才会sendEmptyMessageDelayed,也就是通知了一次而已

Trent1985
Trent1985   2015.07.02 11:42
gggfddhj
gggfddhj   2015.07.02 16:24

AddPoint方法中,只有第一次才会sendEmptyMessageDelayed

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【Android】多点触控(判断触摸点是否在view上)
【关键词】 Android 多点触控 【问题】 如何获取单个触摸点的位置,多个触摸点的位置又如何获取呢?如何根据触摸点的位置,确定触摸点是否在 view 上? 【效果图】 【分析】 通过MotionEvent可以获取到触摸点个数;通过MotionEvent.getX(int pointerIndex)方法,可以获取到指定触摸点的X值;对于Y坐标同理; 【解
Linux/Android多点触摸协议
关于Linux多点触摸协议大家可以参考kernel中的文档:https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt,而这里根据实际的例子来理解多点触摸协议。 多点触摸协议有两种,A协议和B协议。 首先来看A协议,协议上说了报点格式是这样的,以两点为例: ABS_MT_POSITION_X x[0
Android中多点触控以及手势的基础知识
现在一般的android手机都会使用电容触摸屏,所以基本上都会支持多点触控,同样在android系统中应用程序可以使用多点触控的事件来完成各种手势和场景需求,下面简单讲一下如何使用多点触控: 1、相关接口和事件介绍 MotionEvent.getAction() 对于单点触控,我们由MotionEvent.getAction()就可以得到以下几种事件:ACTION_DOWN、ACTION_UP等 MotionEvent.ACTION_MASK 而对于多点触控,我们需要由MotionEvent.g
android 获取多点触控的信息
搬家后的博客链接: IT客栈 www.itkezhan.org 用到的是 MotionEvent  在我们的 Activity 里面有 onTouchEvent(MotionEvent event); 这个方法 我自己的程序可以通过重写父类Activity的这个方法从而实现获取用户在屏幕上的一些信息,比如  点击  离开屏幕  当前有多少个触点被激活。 各触点的坐标。
第一章:多点触摸与手势检测
一、响应者链只要继承了UIResponder的对象就可作为事件的响应者,实际上UIControl继承了UIView,UIView又继承了UIResponder,由此可见,所有的对象都可作为事件的响应者。当用户与某个控件交互时,该控件将作为“第一响应者(First Responder)”,第一响应者将作为响应者链的开始,该事件首先被发送给第一响应者(也就是用户触摸屏幕的控件)。事件将沿着响应者链一直向
Android中的多点触摸
代码下载地址 代码一:自定义支持多点触摸的TextView http://download.csdn.net/detail/zhiyuan0932/9513852 什么是多点触摸允许计算机用户同时通过多个手指来控制图形界面的一种技术多点触摸的应用场景 对图片、文字、网页进行放大或者缩小 多手指手势操作自定义控件和布局 触摸事件的重要方法 event.getActionMasked();
Unity Android/IOS 多点触摸实例
Unity中获取到的坐标是左下角为(0,0) 但是绘画的时候是以左上角为(0,0) 所以直接在获取到的坐标上画图是不行的…… using UnityEngine; using System.Collections; public class MultiTouch : MonoBehaviour { public Texture2D imageBG; public Tex
Android记录单点和多点触控的位置
为了完成可以记录滑动和缩放的位置信息,尝试了包括GestureDector类和OnTouchListener类,虽然能够很好的识别具体手势,可是在区分单点还是多点触控方面还是有些欠缺。 本文对TextView进行监听,在position中显示记录触控的痕迹。 tv = (TextView)findViewById(R.id.textv); position = (TextView)findVi
Android—检测手机多点触摸点数
演示效果如下: //写一个实体类 public class Circle { public float x; public float y; public int r=100; public int pointId; int red; int green; int blue; Random random=new Random(
检测手机最多可以几个点触摸
单点触摸屏 触摸屏的功能发展由简及繁,最初的产品只支持最简单的操控,就是一个手指触摸屏幕上的一点来实现操控。比如我们天天在附件超市的POS终端机,或者在机场的check-in终端上进行的操作。以前,我们只能通过屏幕周边的机械按钮进行操控,单点触摸屏在此基础上实现了用户界面方面的一大进步。 当然,机械和新型电容式触摸感应按钮在我们的家庭、办公室及其他地方无所不在:手机、固定电话、遥控器、电视、电