2011-10-25 40 views
31

Tôi đang phát triển một tiện ích có hình ảnh ở phía bên thứ hai, có thể được người dùng chọn ở một trong các màn hình cài đặt. Hình ảnh sau đó có thể được đặt từ người dùng bằng ImageView.setScaleType ("CENTER"). Điều đó hoạt động. URL của hình ảnh sau đó được lưu trữ trong các tùy chọn dưới dạng URL và cũng như Chuỗi mã hóa Base64 của Bitmap (vì tôi muốn thu nhỏ hình ảnh và người dùng có thể xoay hình ảnh đó trong cài đặt)Android RemoteViews, làm thế nào để thiết lập ScaleType của một ImageView bên trong một widget?

Trong tiện ích, Tôi tải hình ảnh. Điều đó hoạt động tốt. Với URI và với Bitmap cũng vậy. ScaleType của ImageView cũng được đặt thành giá trị cố định trong Bố cục, cũng hoạt động.

Nhưng làm cách nào tôi có thể xác định ScaleType của ImageView trong tiện ích con theo chương trình? Nguyên nhân tôi muốn đặt ScaleType thành giá trị, người dùng đã chọn trong cài đặt. Với RemoteViews, chúng ta không thể có được ImageView ...

tôi đã cố gắng:


myRemoteViews.setString (R.id.myImage, "setScaleType", "TRUNG TÂM");


Các logfile nói: Chức năng setScaleType là không thể cho ImageView.

Có ai đó biết cách đặt định nghĩa này bên trong AppWidget không?

Trả lời

42

Bạn có thể sử dụng phân đoạn này để thiết lập loại quy mô cho hình ảnh Xem programatically ..

imgview.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 

Hy vọng nó sẽ giúp ...

+10

Đây là cách đặt loại tỷ lệ cho 'ImageView' bình thường, nhưng người hỏi đang hỏi về một' RemoteViews'. –

8

Nếu bạn nhìn vào mã nguồn của ImageView, bạn sẽ nhìn thấy Phương thức setScaleType thiếu chú thích @android.view.RemotableViewMethod, vì vậy, nó không thể được gọi thông qua giao diện RemoteViews.

Có một giải pháp cho giới hạn này, nhưng không đẹp: xác định XML bố cục khác nhau cho từng loại Scale bạn muốn và chọn giữa chúng ngay trước khi bạn tạo RemoteViews. Nếu bố cục của bạn phức tạp hoặc bạn có nhiều chế độ xem để áp dụng cách này, bạn có thể muốn sử dụng RemoteViews.addView để thêm bố cục ImageView cụ thể bên trong bố cục chính.

Tôi đang sử dụng giải pháp này (với addView) cho appwidgets trong ứng dụng của tôi Showr. Vấn đề với phương pháp này là trình khởi chạy chứng khoán có lỗi: nếu bạn thay đổi loại quy mô của appwidget hiện có bằng cách tạo RemoteViews mới và gọi addView để thêm bố cục ImageView khác, không phải lúc nào cũng nhận ra bố cục đã thay đổi.

+0

Không chắc chắn nếu điều này sẽ làm việc, nhưng những gì về mở rộng 'ImageView' và thêm chú thích, sau đó tùy chỉnh của bạn' ImageView' sẽ gọi đến 'super.setScaleType (...)' – pjco

+2

Bạn không thể sử dụng các lớp học của riêng bạn một 'RemoteViews', chỉ những cái được tích hợp trong hệ thống. –

+0

Ah quá tệ, cảm ơn thông tin mặc dù – pjco

1

Vì không có cách nào đơn giản để gọi setScaleType trên chế độ xem xóa, công việc xung quanh tôi đã tạo ba imageView trong bố cục của tôi và sau đó thay đổi chế độ hiển thị của những loại không có loại tỷ lệ được chọn bởi người dùng:

// first I declared a map to associate preference values with imageView ids 

    private static final HashMap<Integer,Integer> widgetImageViewIds; 

    static { 
     widgetImageViewIds = new HashMap<Integer, Integer>(); 
     widgetImageViewIds.put(MyAppPreferences.PREF_ALIGN_START, R.id.imageViewStart); 
     widgetImageViewIds.put(MyAppPreferences.PREF_ALIGN_CENTER, R.id.imageViewCenter); 
     widgetImageViewIds.put(MyAppPreferences.PREF_ALIGN_END, R.id.imageViewEnd); 
    } 

    ... 

    // then when I update my widget show/hide the widgets based on the preference 

    for (HashMap.Entry<Integer, Integer> entry : widgetImageViewIds.entrySet()) { 
     Integer imageViewAlignment = entry.getKey(); 
     Integer imageViewId = entry.getValue(); 
     views.setViewVisibility(imageViewId, imageViewAlignment.intValue() != imageAlignmentPreferenceValue ? View.GONE : View.VISIBLE); 
    } 
Các vấn đề liên quan