gpt4 book ai didi

java - onDraw 不适用于 Android ImageView

转载 作者:行者123 更新时间:2023-12-02 02:41:32 26 4
gpt4 key购买 nike

我需要在 Android ImageView 上画一个点。

我使用 View 类的自定义子类并重写 onDraw 方法,例如:

public class DrawPoints extends View {

private float x;
private float y;
private Paint mPaint;

public DrawPoints(Context context, float x, float y) {
super(context);
this.x = x;
this.y = y;
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

Log.i("TAG", "onDraw: " + x + "" + y);
mPaint = new Paint();
mPaint.setColor(Color.YELLOW);
canvas.drawCircle(x,y,200,mPaint);
}
}

在我的MainActivity中,我使用onTouch事件来绘制,也不要忘记invalidate(),但它不绘制点。

public class MainActivity extends AppCompatActivity {

private ImageView mImageView;
private Canvas mCanvas;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mCanvas = new Canvas();
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.image_main);
mImageView.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {

float y = motionEvent.getY();
float x = motionEvent.getX();
new DrawPoints(MainActivity.this,x,y).draw(mCanvas);
mImageView.invalidate();
return false;
}
});
}
}

它可能是什么?我已经在 stackoverflow 上阅读了许多有关 onDraw 的示例,但没有任何帮助。

最佳答案

您可以创建一个在触摸事件上绘制圆圈的 ImageView 。示例:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;

import java.util.ArrayList;

public class DrawPoints extends android.support.v7.widget.AppCompatImageView {

private static final String TAG = DrawPoints.class.getSimpleName();

private ArrayList<Point> mSavedPoints = new ArrayList<>();
private Point mLastTouchPoint;
private Paint mPaint;

public DrawPoints(Context context) {
super(context);
init();
}

public DrawPoints(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public DrawPoints(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

private void init() {
mPaint = new Paint();
mPaint.setColor(Color.YELLOW);
}

@Override public boolean dispatchTouchEvent(MotionEvent event) {
mLastTouchPoint = new Point((int) event.getX(), (int) event.getY());
postInvalidate();
return super.dispatchTouchEvent(event);
}

@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mLastTouchPoint != null) {
if (mLastTouchPoint.x > 0 || mLastTouchPoint.y > 0) {
mSavedPoints.add(mLastTouchPoint);
Log.i(TAG, mLastTouchPoint.toString());
}
}

for (Point point : mSavedPoints) {
canvas.drawCircle(point.x, point.y, 200, mPaint);
}

Log.i(TAG, mSavedPoints.toString());
}
}

关于java - onDraw 不适用于 Android ImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45372668/

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