2013-07-31 29 views
8

Tôi muốn người dùng ứng dụng của mình có thể sửa đổi hình ảnh trong thời gian chạy. Người dùng sẽ có thể thay đổi chiều cao và chiều rộng bằng cách khai thác ở góc của hình ảnh xem và kéo nó như minh họa trong biểu đồ sau:Cách tạo ImageView có thể thay đổi kích thước trong Android

enter image description here

Tôi đã dành rất nhiều thời gian nghiên cứu này và tôi đã tìm thấy Making Sense of Multitouch Resize a large bitmap file to scaled output file thứ gì đó như Pinch Zoom nhưng không cái nào trong số này phù hợp với yêu cầu của tôi.

hiện tại tôi đang đổi kích thước bitmap bằng cách sử dụng phần dưới đây và thay đổi chiều rộng trong phương pháp thay đổi onprogress của thanh tìm kiếm thay vì khung. bằng cách sử dụng chức năng này, kích thước ảnh thay đổi không hoạt động trơn tru.

public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){ 

    try { 
     //Decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

     //The new size we want to scale to 
     final int REQUIRED_WIDTH=WIDTH; 
     final int REQUIRED_HIGHT=HIGHT; 

     //Find the correct scale value. It should be the power of 2. 
     int scale=1; 
     while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT) 
      scale*=2; 

     //Decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize=scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
    } 
     catch (FileNotFoundException e) {} 
    return null; 

} 

UPDATE:

Bây giờ làm việc trơn tru bằng vẽ bitmap trong vải sử dụng câu trả lời chấp nhận của this câu hỏi.

phần reaming bây giờ đang đặt khung xung quanh hình ảnh như một thứ gì đó như khung cắt.

Hãy giúp tôi đạt được điều này.

+0

Hi, tôi thấy hướng dẫn này, nhưng hãy để tôi hỏi bạn điều này: Có điểm nằm ở hai bên hình ảnh chỉ cho phép chuyển động trục X hoặc chỉ trục Y? Nếu vậy, thì bạn không thể đặt, trong phần của mã nơi '// Tính toán khoảng cách đã di chuyển', việc thay đổi kích thước hình ảnh đơn giản trên trục X và/hoặc Y và cập nhật hình ảnh này thành' ImageView'? – g00dy

+0

không có điểm nào không nằm. Khung này phải theo kích thước hình ảnh sau khi thay đổi kích thước. do đó, khung này sẽ phải tạo động mỗi lần xung quanh hình ảnh. tôi đã thay đổi hình ảnh câu hỏi của mình. plz kiểm tra hình ảnh mới này. cảm ơn ... –

+0

Tôi đoán rằng phần với các điểm đã được thực hiện? Bạn đã làm gì cho điều này chưa? – g00dy

Trả lời

1

bạn có thể thực hiện điều này bằng library sử dụng cropimageview3 này và thiết lập hình ảnh của bạn trong drawable phao và bạn đã làm xong

1

"Bạn đang làm sai".

Thay vì tạo mới Bitmap mỗi thời gian, bạn có nhiều lựa chọn:

  1. Resize ImageView riêng của mình.
  2. Tạo riêng của bạn View và vẽ bitmap bằng cách sử dụng Canvas. Điều này sẽ cho phép bạn kéo dài Btimap như bạn muốn.

Nếu bạn sẽ đi với Canvas, thì để hiển thị "điểm cắt" này, bạn cũng có thể vẽ chúng trên canvas của mình. Mặc dù điều, để đạt được hành vi mong muốn và sự xuất hiện có thể bạn sẽ cần phải ghi đè các phương pháp cũng như:

  1. onTouchEvent - để xử lý hành vi thay đổi kích thước của bạn, khi người dùng chạm vào điểm cây trồng.
  2. onMeasure - để tăng nhẹ kích thước View của bạn, bởi vì "các điểm cắt" của bạn hơi xuất hiện từ hình ảnh.
+0

cảm ơn tôi đã có sự êm ái mà tôi muốn. Tôi đang sử dụng canvas ngay bây giờ..và bất kỳ đề xuất nào về khung hình giống như chúng tôi cắt hình ảnh. –

+0

@SanketKachhela xem câu trả lời đã chỉnh sửa –

+0

cảm ơn tôi đang triển khai. –

Các vấn đề liên quan