如何设置阿尔法值可绘制在StateListDrawable? [英] How to set alpha value for drawable in a StateListDrawable?

查看:124
本文介绍了如何设置阿尔法值可绘制在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆