Android onTouch+;画布&x2B;安卓

Android onTouch+;画布&x2B;安卓,android,Android,我想在屏幕上画一个圆圈,当握住手指时,圆圈会移动。在代码中,有一种方法可以在该事件中更改屏幕的颜色,但如何更改圆的位置?帮帮忙 package com.example.canva; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; imp

我想在屏幕上画一个圆圈,当握住手指时,圆圈会移动。在代码中,有一种方法可以在该事件中更改屏幕的颜色,但如何更改圆的位置?帮帮忙

package com.example.canva;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class MyActivity extends Activity implements View.OnTouchListener {
    /**
     * Called when the activity is first created.
     */
    private float x;
    private float y;
    private String sDown;
    private String sMove;
    private String sUp;
    private DrawView dr;
    private Paint p;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        dr = new DrawView(this);
        dr.setOnTouchListener(this);

        setContentView(dr);
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        x = motionEvent.getX();
        y = motionEvent.getY();

        switch (motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN: // нажатие
                sDown = "Down: " + x + "," + y;
                sMove = ""; sUp = "";
                break;
            case MotionEvent.ACTION_MOVE: // движение
                sMove = "Move: " + x + "," + y;
                dr.changeColor((int)-x);
                dr.getX(x);
                dr.getY(y);
                break;
            case MotionEvent.ACTION_UP: // отпускание
            case MotionEvent.ACTION_CANCEL:
                sMove = "";
                sUp = "Up: " + x + "," + y;
                break;
        }
        return true;
    }
    }

    class DrawView extends View {
        private Paint p;

        public DrawView(Context context) {
            super(context);
            p = new Paint();
            p.setColor(Color.RED);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawCircle(getX(),getY(),50,p);
            invalidate();
        }

        public float getX(float X){
            return X;
        }
        public float getY(float Y){
            return Y;
        }

        public void changeColor(int color){
            this.setBackgroundColor(color);
        }

}
View.getX()
View.getY()
是在API级别11中引入的。你应该意识到这一点。您的DrawView.getX(float X)和DrawView.getY(float Y)是无用的,因为您返回的值与传递给该方法的值相同。在onTouch方法中,您可能需要调用
View.getX()
View.getY()
对,它们是
View.setX(float x)
View.setY(float y)
。Api级别11中也引入了这些功能

class DrawView extends View {
        private Paint p;
        int x=getX(),y=getY();
        public void refresh(int x,int y){
            this.x=x;
            this.y=y;
            invaliate();
        }


        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawCircle(x,y,50,p);
        }
  }
在onTouch呼叫中

 dr.refresh(x,y);
另外,您的
getX
getY
函数也是无用的

   public float getX(float X){
        return X;
    }
而是在DrawView和setX中创建一个变量x

   public void setX(float X){
        this.X=X;
    }
int x=getX(),y=getY();公共无效刷新(float x,float y){this.x=x;this.y=y;invaliate();}