Sha*_*God 43 android android-drawable
试图学习一些新的东西,无法想出这一点,任何帮助表示赞赏.鉴于这个简单的代码来自Google的文档:
layers.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/first_image">
<bitmap android:src="@drawable/android_red"
android:gravity="center" />
</item>
<item android:id="@+id/second_image" android:top="10dp" android:left="10dp">
<bitmap android:src="@drawable/android_green"
android:gravity="center" />
</item>
<item android:id="@+id/third_image" android:top="20dp" android:left="20dp">
<bitmap android:src="@drawable/android_blue"
android:gravity="center" />
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
和main.xml:
<ImageView
android:id="@+myImageView"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/layers" />
Run Code Online (Sandbox Code Playgroud)
问题:如何以编程方式引用图层列表中的一个drawable,以便将其更改为不同的drawable?
谢谢.
所以现在我有了我的新drawable,我想换变量myImage
正确吗?现在我如何将其纳入图层列表?我想我用findDrawableByLayerId
和setDrawableByLayerId
,但究竟如何?或者我可能完全错了!救命!
我想做什么?更改显示的drawable.例如,假设我有另一个名为"android_purple"的drawable,我将如何在上面的layer-list示例中为"android_green"drawable切换它?
编辑:
随着我在这里有限的知识是到目前为止我的代码(它不工作,我得到的错误setDrawableByLayerId
是不确定的):
Resources res = getApplicationContext().getResources();
BitmapDrawable newImage = (BitmapDrawable) res.getDrawable(R.drawable.android_purple); //Get replacement image, can't use LayerDrawable or get error.
boolean layer_drawable_changed = (setDrawableByLayerId((R.id.second_image), newImage)); //Set new drawable? Error on this line.
Run Code Online (Sandbox Code Playgroud)
Com*_*are 53
问题:如何以编程方式引用图层列表中的一个drawable,以便将其更改为不同的drawable?
这是我会尝试的:
步骤1:将android:id
属性放在<item>
元素上,如文档中所示
步骤#2:将getDrawable()
结果转换为aLayerDrawable
步骤3:mutate()
如果您不想影响使用其他人Drawable
(可能是可选的),请致电
步骤#4:调用为给定的图层ID setDrawableByLayerId()
设置/替换aDrawable
小智 51
第1步:从drawable文件夹中检索Layer-list :(我的名字叫/res/drawable/digits.xml上的数字)
LayerDrawable ld = (LayerDrawable) getResources().getDrawable(R.drawable.digits);
Run Code Online (Sandbox Code Playgroud)
第2步:命名替换图像(不是图层列表中已有的图像)
Drawable replace = (Drawable) getResources().getDrawable(R.drawable.replacing_image);
Run Code Online (Sandbox Code Playgroud)
第3步:使用setDrawableByLayerId(int id,Drawable d)方法替换Image
boolean testfactor = ld.setDrawableByLayerId(R.id.first_image, replace);
Run Code Online (Sandbox Code Playgroud)
这将返回一个布尔值,如果替换图像失败,将返回false
第4步:加载主Imageview(基本上是实际xml布局代码中的layer-list的id)
ImageView layoutlist1 = (ImageView)findViewById(R.id.layout_list1);
Run Code Online (Sandbox Code Playgroud)
步骤5 :(重新) - 使用更新的LayerDrawable设置Imageview,方法是:
layoutlist1.setImageDrawable(ld);
Run Code Online (Sandbox Code Playgroud)
资源:我是一名软件和移动应用程序开发人员.
为了达到这一点,我浏览了整个网络和很多Stackflow.com.所有答案都与本页面上的答案相似.我试图做同样的事情.然后我想到了"更新图像"的想法并且来到了这里.
当你想要一个Bitmap代替列表中的项目时,这应该/也可以工作.您只需使用replace(setDrawableByLayerId)方法.替换ids.ImageView有很多方法.
这也很有用:LayerList drawable +转换为Bitmap