我想将位图设置为 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
。
你尝试使用代码吗?我在我的应用程序中使用它。
Paint paint = new Paint();
paint.setAlpha(100);
canvas.drawBitmap(bitmap, src, dst, paint);
但是...检查您需要什么并根据您需要进行更改,图像视图、绘画或位图:
ImageView.setAlpha().
BitmapDrawable.setAlpha().
嗨,我已经使用这种方式完成了此操作,请检查, 当你进入屏幕时看看它是如何工作的
@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);
}
如果您不想使用装订,请用黄油刀代替。
查看这个示例以获取更多信息。您可以了解所有事情。
必须在 <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>