【发布时间】:2011-07-09 20:59:19
【问题描述】:
我有一张想要在屏幕上显示的图片 (jpg)。 此外,图片应部分被透明效果覆盖。 透明盖应该是动态的。所以例如每天都会显示更多的图片。 这是一张图片来说明我的意思:
我有一张没有灰色封面的图片,想添加此封面,但步骤不同。
谁能给我一个提示如何做到这一点。
【问题讨论】:
标签: android image transparency
我有一张想要在屏幕上显示的图片 (jpg)。 此外,图片应部分被透明效果覆盖。 透明盖应该是动态的。所以例如每天都会显示更多的图片。 这是一张图片来说明我的意思:
我有一张没有灰色封面的图片,想添加此封面,但步骤不同。
谁能给我一个提示如何做到这一点。
【问题讨论】:
标签: android image transparency
您可以使用小部件简单地做到这一点:
FrameLayout 是在另一个视图之上覆盖视图的通用机制:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/my_image"/>
<View
android:id="@+id/overlay"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</FrameLayout>
然后在您的 Java 代码中,您可以动态设置叠加层的透明度:
View overlay = (View) findViewById(R.id.overlay);
int opacity = 200; // from 0 to 255
overlay.setBackgroundColor(opacity * 0x1000000); // black with a variable alpha
FrameLayout.LayoutParams params =
new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, 100);
params.gravity = Gravity.BOTTOM;
overlay.setLayoutParams(params);
overlay.invalidate(); // update the view
【讨论】:
您可以在画布来自onDraw() 请求的情况下执行类似的操作:
Paint paint = new Paint();
Rect r = new Rect();
paint.setColor(0x80808080); // translucent gray
r.right = iDisplayWidth-1;
r.left = 0;
r.top = iDisplayHeight/2;
r.bottom = iDisplayHeight-1;
canvas.drawRect(r, paint); // fill with gray
【讨论】: