キャンバスを使用してビットマップを描画し、imageViewで覆われたビットマップを設定します。Androidキャンバスが別の方法でビットマップに描画しない
drawGraph()というメソッドで基本的な描画を描画しています。ユーザーがキャンバスに触れると、そこに円を描く必要があります。そのためにonTouchEvent()メソッド内にキャンバスを使用しています。 、コードは以下の通りですが、問題は何ですか?どうすれば解決できますか?
もう一つのビットマップを直線で作成しようとしましたが、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);
私は座標を変換しました: int =(int)(drawPanel.getX()+ x); int b =(int)(drawPanel.getY()+ myBitmap.getHeight() - y); drawGraph()関数では正常に動作し、同じルールがcheckClicked()関数に適用されません。 drawPanel.getX()とdrawPanel.getY()は関数間で変更しますか? 私を助けてください!ありがとう! – philwu
imageViewをクリックするとdrawGraph()関数が呼び出されます。 drawGraph()は、図面の上半分しか見ることができないので、imgaeViewの範囲から基本的な図面を再描画します。 – philwu