gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:37:56 25 4
gpt4 key购买 nike

我仍在学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com