android - 如何在 StateListDrawable 中为 drawable 设置 alpha 值?

标签 android alpha-transparency

我想在按下时更改可绘制对象的 alpha 值。 因此,我创建了两个可绘制对象并将它们放在一个 StateListDrawable 中,并为按下状态设置了 alpha 值。但它就是行不通。

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);

更新: 我的最终解决方案是像这样创建 BitmapDrawable 的子类, 并在 onStateChange() 方法中更改 alpha 值。

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;
}

最佳答案

这对我有用

  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);

关于android - 如何在 StateListDrawable 中为 drawable 设置 alpha 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705304/

相关文章:

java - getMenuInflater 导致空指针异常

java - SealedObject 与 Stream Cypher,优缺点

android - 如何获取日期和时间并将其保存在文本文件android中?

android - 无法透明位图图像的像素

c++ - 如何在不更改其他 channel 的情况下有效地将 cv::Mat 的给定 channel 设置为给定值?

java - 如果 ScrollTo() 通过 onBackPressed() 从 MainActivity 运行,则无法正常工作

Android:图库中的内存不足异常

icons - Ico 格式 - 32 位 PNG 与 32 位 BMP 与 24 位 BMP

透明颜色绘图的java性能影响?

matlab - 与 "undocumented Matlab"图句柄的行为不一致