5

これは、ユーザーが指で描画できるようにするImageViewの単純な拡張のコードです。

public class MyImageView extends ImageView {

    List<Point> points = new ArrayList<Point>();
    Paint paint = new Paint();

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

    @Override
    public void onDraw(Canvas canvas) {
        for (Point point : points) {
            canvas.drawCircle(point.x, point.y, 5, paint);
            // Log.d(TAG, "Painting: "+point);
        }
        super.onDraw(canvas);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        Point point = new Point();
        point.x = event.getX();
        point.y = event.getY();
        points.add(point);
        invalidate();
        Log.d("", "point: " + point);
        return true;
    }

    class Point {
        float x, y;
        @Override
        public String toString() {
            return x + ", " + y;
        }
    }
}

これはかなりうまくいきます。

ここで、このコードを使用してビットマップの上部に描画します。

私が使用した:

MyImageView ivPic = (MyImageView) dialog.findViewById(R.id.ivPic);
ivPic.setImageBitmap(picture);

ただし、描画はビットマップの「背後」に描画されます。

ここに画像の説明を入力してください

ビットマップの「上部」にどのように描画できるか、何か考えがありますか?

4

4 に答える 4

5

onDrawメソッドの順序を変更しました。最初に配置super.onDraw(canvas);しましたが、現在は機能していると思います。

于 2012-12-30T21:33:01.360 に答える
3

オーバーライドしてdispatchDrawメソッドを使用し、ビューを描画するために使用しました

于 2012-06-24T09:55:57.180 に答える
0

私は自分の質問に答えます、ちょうど答えを見つけました:

ivPic.setBackgroundDrawable(new BitmapDrawable(getResources(),picture));

それがベストプラクティスかどうかはわかりませんが、それは私にとってはうまくいきます...

于 2012-06-24T09:44:46.517 に答える
0

シーケンスを変更します:最初にsuper.OnDraw(canvas)、次にペイントスタッフ

@Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        for (Point point : points) {
            canvas.drawCircle(point.x, point.y, 5, paint);
            // Log.d(TAG, "Painting: "+point);
        }
    }
于 2022-01-07T05:41:54.960 に答える