我还在学习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;
}
}
答案 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