繁体   English   中英

Android RemoteViews,如何在窗口小部件中设置ImageView的ScaleType?

[英]Android RemoteViews, how to set ScaleType of an ImageView inside a widget?

我正在开发一个带有图像的小部件,可以在一个设置屏幕中由用户选择。 然后可以使用ImageView.setScaleType(“CENTER”)从用户设置图像。 这样可行。 然后,图像的URL作为URL存储在首选项中,也作为Bitmap的Base64编码字符串存储(因为我想缩小图像,用户可以在设置中旋转它)

在小部件中,我加载图像。 这很好。 使用URI和Bitmap也是如此。 ImageView的ScaleType也设置为布局中的固定值,也适用。

但是如何以编程方式在窗口小部件中定义ImageView的ScaleType? 原因我想将ScaleType设置为值,用户已在设置中选择。 使用RemoteViews,我们无法获得ImageView ...

我试过了:


myRemoteViews.setString(R.id.myImage,“setScaleType”,“CENTER”);


日志文件说:ImageView无法使用函数setScaleType。

有人知道如何在AppWidget中进行此定义吗?

您可以使用此段以编程方式设置图像视图的比例类型。

 imgview.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

希望能帮助到你...

如果查看ImageView的源代码,可以看到setScaleType方法缺少@android.view.RemotableViewMethod注释,因此无法通过RemoteViews接口调用它。

这个限制有一个解决方法,但它并不漂亮:为您想要的每个ScaleType定义不同的布局XML,并在创建RemoteViews之前选择它们。 如果您的布局很复杂,或者您有多个视图要应用此变通方法,则可能需要使用RemoteViews.addView在主布局中添加特定的ImageView布局。

我在我的应用程序Showr中使用此解决方法(使用addView )用于appwidgets。 这种方法的问题在于库存启动器有一个错误:如果你通过创建一个新的RemoteViews并调用addView来为它添加一个不同的ImageView布局来改变现有appwidget的比例类型,它并不总是意识到布局有改变。

由于在删除视图上调用setScaleType并不是一种简单的方法,因此我想出的工作是在我的布局中制作三个imageView,然后更改那些没有用户选择的缩放类型的图像的可见性:

    // 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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM