在Android SDK文档中,与@ drawable/my_image xml语法一起使用的所有示例都直接处理存储在项目的res/drawable目录中的图像.
我想知道在drawable目录中创建子目录是否明确不可行.
例如,如果我有以下目录布局:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
Run Code Online (Sandbox Code Playgroud)
我可以参考金枪鱼沙拉三明治的图像@ drawable/sandwiches/tunaOnRye
或者我必须将层次结构保持在drawable目录中.
我有一个图像res/drawable/test.png(R.drawable.test).
我想将此图像传递给接受的函数Drawable.
(例如mButton.setCompoundDrawables())
那么如何将图像资源转换为Drawable?
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
我想设置一个视图的背景可绘制.有两种方法(据我所知):setBackground和setBackgroundDrawable.
当我使用时setBackground,它表示它已经在API级别16中添加,但我的项目的最小SDK版本是7.我认为它不适用于16以下的任何东西,我是对的吗?但是当我使用setBackgroundDrawable时,它表示它已被弃用.
我应该用什么?
我有一个全屏PNG,我想在飞溅中显示.只有一个错误,我不知道该怎么把大小在每个绘制的文件夹(ldpi,mdpi,hdpi,和xhdpi).我的应用程序应该在所有手机和平板电脑上运行良好和美观.我应该创建什么尺寸(以像素为单位),以便在所有屏幕上显示漂亮的效果?
我需要让Drawable对象显示在图像按钮上.有没有办法使用下面的代码(或类似的东西)从android.R.drawable.*包中获取对象?
例如,如果drawableId是android.R.drawable.ic_delete
mContext.getResources().getDrawable(drawableId)
Run Code Online (Sandbox Code Playgroud) 我有这个drawable有一个圆角矩形作为背景:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke android:width="1dp" android:color="@color/light_gray" />
<padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
<corners android:radius="6dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
按预期,这工作正常.
现在,我想将此更改为仅围绕顶角,因此我将其更改为:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke android:width="1dp" android:color="@color/light_gray" />
<padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
<corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
但是现在没有一个角是圆角的,我得到一个普通的矩形.我在这里错过了什么?
我有一个ImageView,它有一个可绘制的图像资源设置到选择器.如何以编程方式访问选择器并更改突出显示和非突出显示状态的图像?
这是选择器的代码:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/iconSelector">
<!-- pressed -->
<item android:state_pressed="true" android:drawable="@drawable/btn_icon_hl" />
<!-- focused -->
<item android:state_focused="true" android:drawable="@drawable/btn_icon_hl" />
<!-- default -->
<item android:drawable="@drawable/btn_icon" />
</selector>
Run Code Online (Sandbox Code Playgroud)
我希望能够替换btn_icon_hl和btn_icon其他图像.
我正在为应用程序创建UI,我正在尝试使用灰度图标,并允许用户将主题更改为他们选择的颜色.要做到这一点,我试图只应用某种ColorFilter来覆盖drawable顶部的颜色.我尝试过使用PorterDuff.Mode.MULTIPLY,它几乎完全按照我的需要工作,除了白色也覆盖了颜色.我理想的是像Photoshop中的"颜色"混合模式,图形保留其透明度和亮度,只修改图像的颜色.例如:
变 
在做了一些研究后,看起来ColorMatrixColorFilter类可能会做我需要的,但我似乎无法找到指向矩阵如何使用的任何资源.它是一个4x5矩阵,但我需要知道的是我如何设计矩阵.有任何想法吗?
编辑:好的,到目前为止我发现的内容如下:
1 0 0 0 0 //red
0 1 0 0 0 //green
0 0 1 0 0 //blue
0 0 0 1 0 //alpha
Run Code Online (Sandbox Code Playgroud)
此矩阵是单位矩阵(应用时,不做任何更改),数字范围从0到1(浮点数).该矩阵将与每个像素相乘以转换为新颜色.所以这就是我开始变得模糊的地方.所以我认为每个像素都是1 x 4向量,其中包含0.2, 0.5, 0.8, 1将用变换矩阵点缀的argb值(例如).因此,要使图像的红色强度加倍,您可以使用以下矩阵:
2 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
Run Code Online (Sandbox Code Playgroud)
这会给你一个矢量(颜色)0.4, 0.5, 0.8, 1.从有限的测试,这似乎是这种情况,并且工作正常,但我实际上仍然有同样的问题(即白人获得着色).进一步阅读告诉我,这是因为它正在对RGB值进行转换,而对于色调偏移,应首先将值转换为HSL值.所以我可能会编写一个可以读取图像并转换颜色的类,并用新颜色重绘图像.这会产生StateListDrawables的另一个问题,因为我不知道如何在代码中获取每个代码并修改所有这些问题,以及它将会有多慢.:/
嗯,好吧,所以我想我的另一个问题是矩阵是否可以用于将RGB转换为具有光度信息的另一个颜色空间,例如L a b或HSL?如果是这样,我可以将该转换的矩阵相乘,然后将色调调整为THAT矩阵,然后将该矩阵应用为ColorFilter.
在我的drawable文件夹中,我有一些图像,它们都引用完美,但是当我尝试在同一文件夹中添加具有完全相同大小的任何更多图像,并尝试引用它时,标记错误"无法转换@ drawable/picture into a drawable".我尝试使用不同名称的相同图像,它只是一直给我错误.我也尝试过不同的XML布局和相同的东西.此外,图片的名称一直是"jack","abc","question_mark",你可以看到严格按照你可以使用的字符的规则,仍然会出现错误信息.对于如何解决问题,任何建议都会很棒,谢谢.
无法将@ drawable/picture转换为drawable
android ×10
drawable ×10
background ×2
colorfilter ×1
colormatrix ×1
image ×1
imageview ×1
java ×1
png ×1
reference ×1
resources ×1
screen ×1
view ×1