0

我是编程新手,主要是自学和使用书籍,并从其他人在这个论坛上提出的问题中得到很多帮助。我目前正在为假人开发 android 游戏,遇到了几个问题,其中大部分我已经能够自己解决,但是我无法解决这个编译器错误。它无法识别代码中的 canvas.drawCircle。我不知道为什么。非常感谢任何帮助或想法。提前谢谢汤姆

public class CrazyEightsView extends View {

    private Paint redPaint;
    private int circleX;
    private int circleY;
    private float radius;

    public  CrazyEightsView(Context context) {
        super(context) ;
        redPaint = new Paint();
        redPaint.setAntiAlias(true);
        redPaint.setColor(Color.rgb(99, 00, 00));
        circleX=100;
        circleY=100;
        radius=30;      
    }

    @Override
    public void onDraw (Canvas canvas) {

    }


    public  boolean onTouchEvent (MotionEvent event) {
        int eventaction = event.getAction();
        int X =(int)event.getX();
        int Y =(int)event.getY();

        switch (eventaction){
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_MOVE:
                break;
            case MotionEvent.ACTION_UP:
                circleX = X;
                circleY = Y;
                break;

                invalidate();
                return true;
        }

        canvas.drawCircle (circleX, circleY, radius, redPaint); 
    }
}
4

2 回答 2

1

正如 Raghunandan 所说,不要尝试使用除onDraw(). 设置您的XYonTouch(),然后使视图无效。这将onDraw()再次调用。

于 2013-06-05T17:03:22.650 回答
0

在 draw 方法中移动它

      canvas.drawCircle (circleX, circleY, radius, redPaint);

要强制绘制视图,请调用 invalidate()。

http://developer.android.com/reference/android/view/View.html#invalidate()

invalidate() 将刷新绘图(调用 onDraw(canvas).

http://developer.android.com/reference/android/graphics/Canvas.html

根据您的需要修改以下内容。

    public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    CrazyEightsView ev= new CrazyEightsView(this);

    setContentView(ev);
}

public class CrazyEightsView extends View {

    private Paint redPaint;
    private int circleX;
    private int circleY;
    private float radius;

    public  CrazyEightsView(Context context) {
        super(context) ;
        redPaint = new Paint();
        redPaint.setAntiAlias(true);
        redPaint.setColor(Color.rgb(99, 00, 00));
        circleX=100;
        circleY=100;
        radius=30;

    }
    @Override

    public void onDraw (Canvas canvas) {
                    // draw your circle on the canvas
        canvas.drawCircle (circleX, circleY, radius, redPaint);
    }

    public  boolean onTouchEvent (MotionEvent event) {
            int eventaction = event.getAction();
            int X =(int)event.getX();
            int Y =(int)event.getY();

            switch (eventaction){
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_MOVE:
                break;
            case MotionEvent.ACTION_UP:
                circleX = X;
                circleY = Y;
                invalidate();// call invalidate to refresh the draw
                break;

            }
            return true;
    }
    }

 }

在此处输入图像描述

于 2013-06-05T17:06:23.520 回答