2013-10-28 5 views
1

Я хочу реализовать функцию обрезки, где я хочу иметь маленький прямоугольник над imageView. Прямоугольник должен быть статическим, и я хочу переместить изображение и получить изображение, которое будет обрезано в прямоугольной области. Затем выберите изображение в прямоугольнике как обрезанное изображение. Я попытался создать холст, используя Bitmap в качестве параметра, но он не работает. Я много пробовал искать, как это сделать. но не мог найти его нигде. Пожалуйста, помогите ..Рисовать прямоугольник над ImageVIew

Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(), R.drawable.indoor); 

    Bitmap mutBitmap = Bitmap.createBitmap(200, 400,bitmap.getConfig()); 

    Canvas canvas = new Canvas(mutBitmap); 

      Paint paint = new Paint(); 
      paint.setColor(Color.BLACK); 
      paint.setStyle(Paint.Style.FILL_AND_STROKE); 
      paint.setStrokeWidth(10); 
      float leftx = 20; 
      float topy = 20; 
      float rightx = 50; 
      float bottomy = 100; 
      canvas.drawRect(leftx, topy, rightx, bottomy, paint); 

Я использую приведенный выше код, но не прямоугольник не рисуется на ImageView ..

+0

Вы можете разместить свой код, что у вас есть попробовал .. а что вы подразумеваете под _ "это не работает" _ .. сбой ?, не показывает? .. показывает неправильно ??? или что? –

+0

Здесь вы можете найти несколько советов по проблеме http://stackoverflow.com/questions/19263989/optimizing-custom-crop-drawing – Niko

+0

@AmulyaKhare См. Править пожалуйста. – Bhavna

ответ

4

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

class DrawView extends ImageView { 

    public DrawView(Context context) { 
     super(context); 
    } 

    DrawView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    DrawView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     Paint paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     paint.setStyle(Paint.Style.FILL_AND_STROKE); 
     paint.setStrokeWidth(10); 
     float leftx = 20; 
     float topy = 20; 
     float rightx = 50; 
     float bottomy = 100; 
     canvas.drawRect(leftx, topy, rightx, bottomy, paint); 
    } 
} 

Теперь в макете, включают в себя DrawView вместо вашего текущего ImageView

+0

Обновленный ответ для включения вызова 'super.onDraw()' –

+0

Как установить динамические атрибуты для прямой? –

Смежные вопросы