Android使用多點觸摸畫圓

利用多點觸摸點擊屏幕畫圓圈
Cricle類
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();

    public Circle(float x, float y, int pointId) {
        this.x = x;
        this.y = y;
        this.pointId = pointId;
        //設置隨機顏色
        red=random.nextInt(255);
        green=random.nextInt(255);
        blue=random.nextInt(255);

    }

    public void drawSelf(Canvas canvas, Paint paint){
        paint.setColor(Color.rgb(red,green,blue));
        //畫圈
        canvas.drawCircle(x,y,r,paint);
    }


}
自定義的View
MyViewOfClass類
public class MyViewOfClass extends View {
    List<Circle> circles=new ArrayList<>();

    public MyViewOfClass(Context context) {
        super(context);
    }

    public MyViewOfClass(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public MyViewOfClass(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public MyViewOfClass(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //實例化畫筆
        Paint paint=new Paint();
        //設置爲空心
        paint.setStyle(Paint.Style.STROKE);
        //循環所有的Circle,調用drawSelf畫圈的方法
        for (Circle circle : circles) {
            circle.drawSelf(canvas,paint);
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //獲取手指的行爲
        int action=event.getAction();
        int action_code=action&0xff;

        //獲取手指的下標Index
        int pointIndex=action>>8;

        //獲得手指的座標
        float x=event.getX(pointIndex);
        float y=event.getY(pointIndex);

        //獲得手指的名字ID
        int pointId=event.getPointerId(pointIndex);

        //如果爲按下時間,賦值爲0,即進入switch中
        if(action_code>=5){
            action_code-=5;
        }

        //判斷,是按下還是擡起還是移動
        switch (action_code) {
            //按下
            case MotionEvent.ACTION_DOWN:
                //實例化圓
                Circle circle=new Circle(x,y,pointId);
                //將圓添加到集合中
                circles.add(circle);
                break;
            //擡起
            case MotionEvent.ACTION_UP:
                //將Circle從集合中移除
                circles.remove(get(pointId));
                break;
            //移動
            case MotionEvent.ACTION_MOVE:
                for (int i=0;i<event.getPointerCount();i++){
                    int id=event.getPointerId(i);
                    //給x,y賦值
                    get(id).x=event.getX(i);
                    get(id).y=event.getY(i);
                }
                break;
        }
        invalidate();
        return true;
    }

    //獲得Circle
    public Circle get(int pointId){
        for (Circle circle : circles) {
            if(circle.pointId==pointId){
                return circle;
            }
        }
        return null;
    }

}

然後設置MainActivity中的
setContentView(new MyViewOfClass(this));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章