如何设置阿尔法值可绘制在StateListDrawable? [英] How to set alpha value for drawable in a StateListDrawable?
本文介绍了如何设置阿尔法值可绘制在StateListDrawable?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想换一个绘制的alpha值时,它是pssed $ P $。 所以,我创建了两个可绘制,并把它们放在一个StateListDrawable,并设置为pressed状态的α值。但它只是不工作。
StateListDrawable内容=新StateListDrawable();
可绘制contentSelected = this.getResources()。getDrawable(
R.drawable.content_background);
。contentSelected.mutate()setAlpha(100);
。可绘制contentNormal = this.getResources()getDrawable(R.drawable.content_background);
content.addState(新INT [] {android.R.attr.state_ pressed},contentSelected);
content.addState(新INT [] {} android.R.attr.state_enabled,contentNormal);
的ImageButton按钮=(的ImageButton)view.findViewById(R.id.content_thumbnail);
button.setImageDrawable(内容);
更新:
我最后的解决方案是创建BitmapDrawable的子类这样的,
并更改 onStateChange()
法的alpha值。
公共AlphaAnimatedDrawable(资源资源,位图位图){
超(资源,位图);
this.setState(新INT [] {android.R.attr.state_ pressed,android.R.attr.state_selected,
android.R.attr.state_enabled});
}
私有静态最终诠释preSSED_ALPHA = 180;
私有静态最终诠释REGULAR_ALPHA = 255;
@覆盖
保护布尔onStateChange(INT []州){
对于(INT状态:状态){
如果(国家== android.R.attr.state_ pressed){
setAlpha(preSSED_ALPHA);
}否则,如果(国家== android.R.attr.state_selected){
setAlpha(REGULAR_ALPHA);
}否则,如果(国家== android.R.attr.state_enabled){
setAlpha(REGULAR_ALPHA);
}
}
返回true;
}
解决方案
这为我工作。
StateListDrawable绘制=新StateListDrawable();
位图enabledBitmap =((BitmapDrawable)米康).getBitmap();
//设置阿尔法直接只是没有工作,所以我们得出一个新的位图!
位图disabledBitmap = Bitmap.createBitmap(
mIcon.getIntrinsicWidth(),
mIcon.getIntrinsicHeight(),Config.ARGB_8888);
帆布油画=新的Canvas(disabledBitmap);
涂料粉刷=新的油漆();
paint.setAlpha(126);
canvas.drawBitmap(enabledBitmap,0,0,油漆);
BitmapDrawable禁用=新BitmapDrawable(mContext.getResources(),disabledBitmap);
drawable.addState(新INT [] {} -android.R.attr.state_enabled,禁用);
drawable.addState(StateSet.WILD_CARD,米康);
I want to change a drawable's alpha value when it is pressed. So I create two drawables and put them in a StateListDrawable and set the alpha value for the pressed state. But it just doesn't work.
StateListDrawable content = new StateListDrawable();
Drawable contentSelected = this.getResources().getDrawable(
R.drawable.content_background);
contentSelected.mutate().setAlpha(100);
Drawable contentNormal = this.getResources().getDrawable(R.drawable.content_background);
content.addState(new int[] { android.R.attr.state_pressed }, contentSelected);
content.addState(new int[] { android.R.attr.state_enabled }, contentNormal);
ImageButton button = (ImageButton) view.findViewById(R.id.content_thumbnail);
button.setImageDrawable(content);
Update:
My final solution is to create a subclass of BitmapDrawable like this,
and change the alpha value in the onStateChange()
method.
public AlphaAnimatedDrawable(Resources res, Bitmap bitmap) {
super(res, bitmap);
this.setState(new int[] { android.R.attr.state_pressed, android.R.attr.state_selected,
android.R.attr.state_enabled });
}
private static final int PRESSED_ALPHA = 180;
private static final int REGULAR_ALPHA = 255;
@Override
protected boolean onStateChange(int[] states) {
for (int state : states) {
if (state == android.R.attr.state_pressed) {
setAlpha(PRESSED_ALPHA);
} else if (state == android.R.attr.state_selected) {
setAlpha(REGULAR_ALPHA);
} else if (state == android.R.attr.state_enabled) {
setAlpha(REGULAR_ALPHA);
}
}
return true;
}
解决方案
This worked for me
StateListDrawable drawable = new StateListDrawable();
Bitmap enabledBitmap = ((BitmapDrawable)mIcon).getBitmap();
// Setting alpha directly just didn't work, so we draw a new bitmap!
Bitmap disabledBitmap = Bitmap.createBitmap(
mIcon.getIntrinsicWidth(),
mIcon.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(disabledBitmap);
Paint paint = new Paint();
paint.setAlpha(126);
canvas.drawBitmap(enabledBitmap, 0, 0, paint);
BitmapDrawable disabled = new BitmapDrawable(mContext.getResources(), disabledBitmap);
drawable.addState(new int[] { -android.R.attr.state_enabled}, disabled);
drawable.addState(StateSet.WILD_CARD, mIcon);
这篇关于如何设置阿尔法值可绘制在StateListDrawable?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文