2

キャンバスにたくさんの円が描かれていて、どれが触れられているか知りたいです。1 つの解決策は、画面のサイズに合わせてビットマップを作成し、画面上の円のコピーを別の色で描画して、getPixel() の呼び出し時にビットマップ poosso がクリックされた円を認識できるようにすることです。私の問題は、ビットマップに円を描く方法がわからないことです...つまり、ビットマップをCanvas上で通常の描画として描画する方法です。

Paint paint;
Bitmap screen;

int w,h;
int px=-1,py=-1; //coordinate 

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    //registriamo le dimensioni della view
    w=MeasureSpec.getSize(widthMeasureSpec);
    h=MeasureSpec.getSize(heightMeasureSpec);
    setMeasuredDimension(w,h);
}

public CustomView(Context context, AttributeSet attrs) {
    super(context, attrs);

    Bitmap.Config conf = Bitmap.Config.ARGB_8888;  //Each pixel is stored on 4 bytes
    screen=Bitmap.createBitmap(w,h, conf);

    paint=new Paint(); // pennello
    paint.setColor(Color.RED);   
    paint.setAntiAlias(true);   
}

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    if(px==-1&&py==-1){ // se non abbiamo ancora settato le coordinate, posizioniamo la bmp al centro
        px=w/2-bw/2; //metà della larghezza view, meno metà della figura
        py=h/2-bh/2; //metà dell'altezza view, meno metà della figura
    }

    canvas.drawCircle(px, py, 70, paint);       
}

public void updatePosition(int x, int y) {      

    invalidate();
}
}
4

2 に答える 2

0

surfaceholder.callback を実装することにより、 ondraw 関数のキャンバスに最初に描画したい背景としてビットマップを描画できるので、これを試すことができます

canvas.drawBitmap(bgrReverse, fromRect2, toRect2, null);

次に、指の動きのポインターを取得する onTouch() イベントを実装し、それらの動きを取得して、受け取った特定の onTouch() と指の動きに円を描くことができます。

于 2013-05-20T11:19:08.430 に答える