android - 如何画一个留下痕迹的点

标签 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;
}
}

最佳答案

例如,将圆圈保存在 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

关于android - 如何画一个留下痕迹的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16331173/

相关文章:

android - RobuSTLy 在 Android 上同时与多个 BLE 设备通信

连接停止时android蓝牙崩溃

android - 如何在 MAUI 中创建 Android 前台服务

android - ContentResolver.requestSync() 调用后未触发 onPerformSync()

java - Swing drawString : Text bounds and line wrapping

java - 在 Java 图形中使用缓冲区

java - 如何获取线与缓冲图像或矩形碰撞的点?

wolfram-mathematica - 在 Mathematica 中绘制正方形网格

android - 样式化 Android Spinner

java - 使用自引用数组,多边形是不可见的