1

我还在学习 Android,我决定下载一个示例绘图应用程序来解决这个问题,并了解一些有关 Android 如何处理图形/drawables/painting 的知识。我的代码在左上角显示了一个绿色和红色的“V”,并且在您触摸的位置后面有一个红点。但是,我发现每次都在重绘屏幕,所以我不能把它作为绘画工具。这几乎就像我将一桶白色油漆倒在表面上,然后重新绘制圆圈。我怎样才能让它跟随你手指的红点留下痕迹?这是代码。

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.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;

public class MainActivity extends Activity implements OnTouchListener  {
private float x;
private float y;
private int moveX;
Paint paint = new Paint();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MyCustomPanel view = new MyCustomPanel(this);

    ViewGroup.LayoutParams params = 
                        new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT,
                                                   LayoutParams.FILL_PARENT);
    addContentView(view, params);
    view.setOnTouchListener(this);

}
private class MyCustomPanel extends View {

    public MyCustomPanel(Context context) {
        super(context);

    }
    @Override
    public void onDraw(Canvas canvas) {

        paint.setColor(Color.GREEN);
        paint.setStrokeWidth(6);

        canvas.drawLine(moveX,10,50,50,paint);
        paint.setColor(Color.RED);

        canvas.drawLine(50, 50, 90, 10, paint);
        canvas.drawCircle(50, 50, 3, paint);
        moveX++;
        canvas.drawCircle(x,y,3,paint);
    }
}
public boolean onTouch(View v, MotionEvent event) {
    x = event.getX();
    y = event.getY();
    v.invalidate();
    return true;
}
}
4

1 回答 1

1

例如,将圆圈保存在 ArrayList 中。制作一个 ArrayList 并将触摸中的每个 xy 坐标保存为一个点。以下代码只是从头开始,目前无法对其进行测试,因此如果有任何问题,请告诉我,当我在家。

    private ArrayList<Point> pointList = new ArrayList<Point>

然后在 On Touch 中:

     Point xyPoint = new Point();
     xyPoint.x = event.getX();
     xyPoint.y = event.getY();
     pointList.add(xyPoint);
     invalidate();

在 onDraw 中,执行一个 for 循环来获取所有点并绘制每个点:

      for(int i=0;i<pointList.size();i++){

          Point p = pointList.get(i);
          canvas.drawCircle(p.x, p.y, 2, paint);

       }

这会在您的手指触摸的地方绘制直径为 2px 的圆圈。但这只是一个简单的例子,你可以做的还有很多,看起来更好。您应该了解如何在路径上绘制以及如何绘制矩形和椭圆形等。这是如何在路径上绘制的一个很好的示例:

http://android-er.blogspot.de/2011/08/drawpath-on-canvas.html

于 2013-05-02T06:24:14.253 回答