android中如何获得drawable的颜色值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中如何获得drawable的颜色值?相关的知识,希望对你有一定的参考价值。
参考技术A 按你问题的问法,你的需求有点困难...drawable中存放的是图片资源,如果你获取一个彩虹图片的颜色值...
如果按照你的问题,一定非要解决的话,需要加条件
其一:纯色;
其二,你要对底层输入输出流很!透彻;
那可能性不高...
so,你的问题可以改成获取一个纯色的且非图片的背景的颜色值
源码是这样定义颜色背景的
public void setBackgroundColor(int color)
setBackgroundDrawable(new ColorDrawable(color));
ColorDrawable是个继承Drawable的东西,这里面有个这么个方法
/**
* Returns the alpha value of this drawable's color.
*
* @return A value between 0 and 255.
*/
public int getAlpha()
return mState.mUseColor >>> 24;
应该是你想要的~追问
你说得太对了,问题解决了,就是按你说得做的,多谢啊
本回答被提问者采纳如何在android中改变可绘制形状的颜色
我正在开发小型Android应用程序,其中我将drawable资源设置为线性布局的背景。现在,我想要做的是动态地改变线性布局的背景颜色,但是在可绘制资源中。我的代码如下:
// bcd.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:endColor="#22000000"
android:startColor="#22000000"
android:angle="270" />
<stroke
android:width="3dp"
android:color="@color/white" />
<corners
android:radius="3dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<LinearLayout
android:id="@+id/lin_llt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
我在我的活动中设置了线性布局的背景,如下所示......
parentLayout = (LinearLayout) view.findViewById(R.id.lin_llt);
parentLayout.setBackgroundResource(R.drawable.bcd);
现在我想做什么我想改变我的可绘制资源的颜色,这意味着改变我的线性布局的颜色,圆角和填充定义在drawable ..
我按照以下方式尝试了这个
ShapeDrawable bgShape = (ShapeDrawable )parentLayout.getBackground();
bgShape.getPaint().setColor(Color.BLACK);
但它不适合我。任何其他解决方案
那怎么办......需要帮助......谢谢......
动态更改布局颜色
LinearLayout Layout = (LinearLayout) findViewById(R.layout.id);
Layout.setBackgroundColor(Color.parseColor("#ffffff"));
动态设置背景颜色渐变
View layout = findViewById(R.id.mainlayout);
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
new int[] {0xFF616261,0xFF131313});
gd.setCornerRadius(0f);
layout.setBackgroundDrawable(gd);
你可以尝试这样的事情:
Drawable sampleDrawable = context.getResources().getDrawable(R.drawable.balloons);
sampleDrawable.setColorFilter(new PorterDuffColorFilter(0xffff00,PorterDuff.Mode.MULTIPLY));
而且你可以参考:
How to change colors of a Drawable in Android?
Change drawable color programmatically
Android: Change Shape Color in runtime
你也可以试试这个:
private static final int[] FROM_COLOR = new int[]{49, 179, 110};
private static final int THRESHOLD = 3;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.test_colors);
ImageView iv = (ImageView) findViewById(R.id.img);
Drawable d = getResources().getDrawable(RES);
iv.setImageDrawable(adjust(d));
}
private Drawable adjust(Drawable d)
{
int to = Color.RED;
//Need to copy to ensure that the bitmap is mutable.
Bitmap src = ((BitmapDrawable) d).getBitmap();
Bitmap bitmap = src.copy(Bitmap.Config.ARGB_8888, true);
for(int x = 0;x < bitmap.getWidth();x++)
for(int y = 0;y < bitmap.getHeight();y++)
if(match(bitmap.getPixel(x, y)))
bitmap.setPixel(x, y, to);
return new BitmapDrawable(bitmap);
}
private boolean match(int pixel)
{
//There may be a better way to match, but I wanted to do a comparison ignoring
//transparency, so I couldn't just do a direct integer compare.
return Math.abs(Color.red(pixel) - FROM_COLOR[0]) < THRESHOLD && Math.abs(Color.green(pixel) - FROM_COLOR[1]) < THRESHOLD && Math.abs(Color.blue(pixel) - FROM_COLOR[2]) < THRESHOLD;
}
如How to change colors of a Drawable in Android?所示
用这个..
<solid android:color="#e1e1e1" />
<stroke
android:width="2dp"
android:color="#808080" />
<corners android:radius="10dp" />
<padding
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />
一种方法是使用第二种颜色创建第二个可绘制XML,然后使用第二个drawable更改布局的背景。
以下工作非常适合以编程方式设置可绘制的颜色而不更改其形状:
parentLayout.getBackground().setColorFilter(
Color.BLACK,
PorterDuff.Mode.SRC_ATOP
);
以上是关于android中如何获得drawable的颜色值?的主要内容,如果未能解决你的问题,请参考以下文章
Android,想获取这个对象里面的Drawable应该使用那个方法?
如何创建由两种颜色并排组成的android drawable?