我使用canvas在位图上绘制并设置imageView上覆盖的位图。
我在drawGraph()方法中绘制了一个基本绘图,当用户在画布中触摸时我必须在那里画一个圆圈,因为我在onTouchEvent()方法中使用了canvas,它没有在那里绘制任何东西,下面给出了代码,问题是什么以及如何解决这个问题。
我还尝试在其上创建另一个带有直线的位图,在drawGraph()和checkClicked()的末尾将新位图设置为imageView。它显示新的位图(绘制直线)在开始时正确设置为imageView,但是当单击imageView时,空白位图(未绘制直线)设置为imageView。所以我确信画布画在checkClicked()中不起作用。
感谢您提前帮助我!
ImageView imageView;
Paint p = new Paint();
Bitmap myBitmap;
Bitmap workingBitmap;
Bitmap mutableBitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img_drawpanel);
workingBitmap = Bitmap.createBitmap(myBitmap);
mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);
imageView = (ImageView) findViewById(R.id.image1);
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int touchX = (int) (event.getX() + imageView.getX());
int touchY = (int) (event.getY() + imageView.getY());
checkClicked(touchX, touchY);
return true;
}
});
drawGraph();
}
public void drawGraph(){
p.setAntiAlias(true);
p.setColor(Color.BLACK);
p.setStyle(Style.FILL_AND_STROKE);
p.setStrokeWidth(5);
Canvas canvas = new Canvas(mutableBitmap);
//basic drawing is successfully drawn here
imageView.setAdjustViewBounds(true);
imageView.setImageBitmap(mutableBitmap);
}
public void checkClicked(int x, int y){
p.setAntiAlias(true);
p.setColor(Color.RED);
p.setStyle(Style.FILL_AND_STROKE);
Canvas canvas = new Canvas(mutableBitmap);
//canvas doesn't draw a circle here
canvas.drawCircle(x, y, 10, p);
imageView.setAdjustViewBounds(true);
imageView.setImageBitmap(mutableBitmap);
答案 0 :(得分:0)
正在绘制,但绘制的位置错误。因为视图中的坐标与位图中的坐标不同。
您可以通过从imageView开始触摸并将手指拖向屏幕的左上角来验证它。
您需要获取屏幕和图像视图的比例和平移,并在绘制前转换坐标。
您可以使用imageView.getImageMatrix()
获取包含图像转换的imageView
的绘图矩阵,并相应地进行数学运算。