如何绘制留下痕迹的点

时间:2013-05-02 05:48:34

标签: android graphics draw paint ondraw

我还在学习Android,我决定下载一个示例绘画应用程序来解决这个问题,并了解一下Android如何处理图形/绘图/绘画。我的代码在左上角显示绿色和红色“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;
}
}

1 个答案:

答案 0 :(得分:1)

例如,将圆圈保存在ArrayList中。创建一个ArrayList并将touch中的每个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的圆圈,手指接触到该圆圈。但这只是一个简单的例子,你可以做更多,看起来更好。你应该学习绘制路径以及如何绘制rects和ovales等。这是一个如何绘制路径的好例子:

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