如何在 API 23+ 中从可绘制选择器设置 alpha?

问题描述 投票:0回答:3

我想将位图设置为 ImageButton 的 src,并使其在按下时变得部分透明。然而,选择器中的

android:alpha
属性似乎没有 做任何事情

我使用我的@drawable/all_close定义了一个

StateListDrawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/all_close" android:alpha="0.5" />
    <item android:drawable="@drawable/all_close" android:alpha="1.0" />
</selector>
<!-- have also tried alpha as 0 to 255, with the same result -->

我已将该可绘制对象设置为我的 ImageButton 的 src:

<ImageButton
    android:src="@drawable/all_nav_close"
    android:background="@drawable/none"/>
<!-- some attributes omitted for space -->

按下时,按钮不会改变。选择器肯定正在被使用,因为更改

state_pressed
可绘制对象将会明显改变按钮:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/all_add" android:alpha="0.5" />
    <item android:drawable="@drawable/all_close" android:alpha="1.0" />
</selector>

但是,

android:alpha
属性似乎对不透明度没有任何影响。项目构建并安装。该属性不会触发“未知属性”linter 警告(和构建失败),但 IDE 不建议这样做。

这是 API 23,使用

com.android.support:appcompat-v7:25.0.0
com.android.support:design:25.0.0

android android-drawable android-selector
3个回答
1
投票

你尝试使用代码吗?我在我的应用程序中使用它。

Paint paint = new Paint();
paint.setAlpha(100);
canvas.drawBitmap(bitmap, src, dst, paint);

但是...检查您需要什么并根据您需要进行更改,图像视图、绘画或位图:

ImageView.setAlpha().
BitmapDrawable.setAlpha().

0
投票

嗨,我已经使用这种方式完成了此操作,请检查, 当你进入屏幕时看看它是如何工作的

 @Override
public void centerScene(ImageView sharedElement) {
    binding.sharedImage.setTranslationY(0);
    setSharedImageRadius(binding.sharedImage, 0);

    binding.deviceImage.setAlpha(1.0f);
    binding.deviceText.setAlpha(1.0f);
    binding.deviceImage.setAlpha(1.0f);
    binding.deviceImage.setScaleX(1.0f);
}

退出屏幕时

 //position goes from -1.0 to 0.0
 @Override
 public void exitScene(ImageView sharedElement, float position) {
    binding.sharedImage.setTranslationY(
            getResources().getDimension(R.dimen.tutorial_shared_element_translate_y)
                    * position);

    setSharedImageRadius(binding.sharedImage, -position);

    binding.deviceText.setAlpha(1 + position);
    binding.deviceImage.setAlpha(1 + position);
    binding.deviceImage.setScaleX(1 - position); // stretch
}

@Override
public void notInScene() {
    binding.deviceImage.setAlpha(0.0f);
    binding.deviceText.setAlpha(0.0f);
}

如果您不想使用装订,请用黄油刀代替。

查看这个示例以获取更多信息。您可以了解所有事情。


0
投票

必须在 <bitmap> 元素上设置

alpha
属性,而不是在
<item>
元素上设置。所以在你的情况下,而不是:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/all_close" android:alpha="0.5" />
    <item android:drawable="@drawable/all_close" android:alpha="1.0" />
</selector>

这样做:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <bitmap android:src="@drawable/all_close" android:alpha="0.5"/>
    </item>
    <item>
        <bitmap android:src="@drawable/all_close" android:alpha="1.0"/>
    </item>
</selector>

或者,当您将 alpha 属性设置为 1.0 (这是默认值)时,这也可以工作:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <bitmap android:src="@drawable/all_close" android:alpha="0.5"/>
    </item>
    <item android:drawable="@drawable/all_close"/>
</selector>
© www.soinside.com 2019 - 2024. All rights reserved.