Невозможно нарисовать прямоугольник над изображением - PullRequest
0 голосов
/ 25 февраля 2012

У меня проблема с рисованием прямоугольника поверх изображения.Здесь мир кода.XML тоже есть.Меня беспокоит, можем ли мы нарисовать прямоугольник над изображением .??1001*

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.cropimage);
            paint=new Paint();
            bobj = new BaldBooth1();
            bm = BaldBooth1.bMap;
            d = new BitmapDrawable(bm);
            iv = ((ImageView) findViewById(R.id.image));
            iv.setImageDrawable(d);
            createRectInView(iv);

            ((ImageButton) findViewById(R.id.next)).setOnClickListener(this);

        }
        public void createRectInView(View v) {
            paint.setColor(Color.BLACK);
            paint.setStrokeWidth(3);
            canvas=new Canvas();
            canvas.drawRect(50, 50, 80, 80, paint);
            v.draw(canvas);


        }

1 Ответ

2 голосов
/ 25 февраля 2012

Ваш метод createRectInView(View v) не рисует прямоугольник над ImageView, он просто создает холст, рисует прямоугольник на этом холсте, а затем рисует содержимое ImageView на этом холсте, поэтому он не делает то, что вы ожидаете.

Вот одно из возможных решений: вы можете расширить ImageView и переопределить его метод onDraw (), например ..

public class ExtendedImageView extends ImageView {
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(50, 50, 80, 80, paint);
    }
}

Обновлен:

Привет, Арун, я просто тестирую код, и он работает нормально. Вот подробности: например, вы можете создать ExtendedImageView в пакете com.abc.widget, поэтому в вашем файле cropImage.xml замените <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content"> на <com.abc.widget.ExtendedImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content">. Как видите, вам нужно всего лишь изменить имя класса. Затем изменил метод onCreate() как:

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.cropimage);
            bobj = new BaldBooth1();
            bm = BaldBooth1.bMap;
            d = new BitmapDrawable(bm);
            iv = ((ImageView) findViewById(R.id.image));
            iv.setImageDrawable(d);
            ((ImageButton) findViewById(R.id.next)).setOnClickListener(this);

        }
...