2015-09-18 25 views
5

Tôi đã triển khai thư viện bằng cách sử dụng recyclerview và tôi đã thêm một onLayoutChangeListener vào trình xem sao cho khi bố cục được tính toán, chiều cao của lần xem hình ảnh được thay đổi để phù hợp với khía cạnh của hình ảnh tỉ lệ. Nó hoạt động tốt khi lần đầu tiên mở hoạt động, xoay thiết bị hoặc mở khóa màn hình, nhưng khi trở lại từ một hoạt động khác, nó không hoạt động. Phương thức này được thực hiện, nhưng số lần xem ảnh không thay đổi. Bất kỳ ý tưởng về những gì có thể gây ra điều này?Thay đổi kích thước của chế độ xem trong OnLayoutChangeListener

 image.addOnLayoutChangeListener(new View.OnLayoutChangeListener(){ 
      @Override 
      public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
       ImageView img = (ImageView) v; 
       Bitmap bm = ((BitmapDrawable) img.getDrawable()).getBitmap(); 
       img.getLayoutParams().height = Utils.scaledHeight(bm.getWidth(), bm.getHeight(), img.getWidth()); 
       img.removeOnLayoutChangeListener(this); 
      } 
     }); 

Trình gỡ lỗi hiển thị chiều cao chính xác được đặt, nhưng hiển thị hình ảnh không phải là thứ cần thiết.

Correct Image

Incorrect Image

+0

nó có thể có gì đó để làm nơi bạn đặt nó trênCreate(). Nếu bạn đang quay điện thoại của bạn, os bố trí bị phá hủy và xây dựng lại, như khi bạn đang mở ứng dụng lần đầu tiên. Nhưng trở lại từ một ứng dụng khác, chỉ gọi onResume() ...... có thể đây là vấn đề .... – Opiatefuchs

+0

Chiều rộng được xác định như thế nào? Bạn có thể giải quyết vấn đề này bằng 'android: adjustViewBounds =" true "' trên ImageView. –

+0

@krislarson Cảm ơn, đã giải quyết được vấn đề. Tôi không biết tùy chọn đó đã tồn tại. Thay vì sử dụng trình nghe, tôi chỉ sử dụng tùy chọn đó và bây giờ nó luôn hoạt động. –

Trả lời

1

Có vẻ như bạn chỉ cần cố gắng để có được tỉ lệ thích hợp trên một ImageView.

ImageView có thuộc tính được gọi là adjustViewBounds. Nếu bạn có độ rộng layout_width cụ thể như match_parent hoặc giá trị dp, bạn có thể chỉ định wrap_content cho layout_height và đặt android:adjustViewBounds="true". Điều này sẽ gây ra các ImageView để tự động tôn trọng tỷ lệ khung hình của hình ảnh khi đo chiều cao.

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