android --手势Gesture

来源:互联网 发布:怎么彻底关闭网络唤醒 编辑:程序博客网 时间:2024/05/21 10:40
package com.zking.view;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;


import com.zking.entity.Circle;


import java.util.ArrayList;
import java.util.List;


/**
 *  
 * @time 2016/12/24 9:16
 * @Version ${REV}
 */
public class MyTouchCircle extends View {


    private List<Circle> circleList=new ArrayList<Circle>();
    private Paint paint;




    public MyTouchCircle(Context context) {
        super(context);
        paint = new Paint();
    }


    public MyTouchCircle(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint = new Paint();
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        for (Circle circle : circleList) {
            circle.drawSelf(canvas,paint);
        }
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {


        //得到手指的行为
        int action=event.getAction();




        //得到手指的下标 INdex
        int index=action>>8;


        //得到手指的坐标
        float x=event.getX(index);
        float y=event.getY(index);


        //得到手指的行为
        int action_code=action&0xff;




        //得到手指的ID(到底是拿一根手指)  Id Index
        int id=event.getPointerId(index);


        if(action_code>=5){
            action_code-=5;
        }


        switch (action_code) {
            case MotionEvent.ACTION_DOWN:
                //按下(实例化圆,将该圆加入到circleList)
                Circle circle=new Circle(x,y,id);
                circleList.add(circle);
                break;
            case MotionEvent.ACTION_UP:
                //抬起
                circleList.remove(getCircle(id));
                break;
            case MotionEvent.ACTION_MOVE:
                for (int i = 0; i < circleList.size(); i++) {
                    //求出新的坐标
                    float xnew=event.getX(i);
                    float ynew=event.getY(i);


                    int idnew=event.getPointerId(i);


                    //得到是哪一个圆
                    Circle c=getCircle(idnew);
                    c.x=xnew;
                    c.y=ynew;
                }


                //移动
                break;
        }




        //重新调用ondraw()
        //重绘
        invalidate();


        return true;
    }




    public Circle getCircle(int id){
        for (Circle circle : circleList) {
            if(circle.id==id){
                return circle;
            }
        }
        return null;
    }




}










0 0