我是Android的图形新手(尽管我非常精通Android编程本身)。我想在我的应用程序中显示“灯泡”。基于某些值,我想改变灯泡的“亮度”。
我为此使用了PNG图像。
<View
android:id="@+id/view2"
android:layout_width="59dp"
android:layout_height="65dp"
android:background="@drawable/lightbulb" />
而且,代码是这样的:
final View normalView = findViewById(R.id.view2);
//Where I need to set the alpha
int alphaValue = /*Some calculation*/
normalView.getBackground().setAlpha(alphaValue);
normalView.invalidate();
png文件是一个透明图形,只有灯泡的轮廓为黑色。现在,当我将alpha设置为较低的值(接近0)时,整个图形变得透明。我只希望灯泡的内容变得透明。我希望灯泡的轮廓保持可见。
我确实尝试按如下方式创建自定义视图,但现在我根本看不到图形。
class LightbulbView extends View {
private BitmapDrawable mLightbulbDrawable;
private Paint mPaint;
/*All constructors which call through to super*/
private void initialize(){
mLightbulbDrawable = new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.lightbulb));
mPaint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mLightbulbDrawable.draw(canvas);
}
/*Without this, I get an NPE when I do a getBackground on this view*/
@Override
public Drawable getBackground() {
return mLightbulbDrawable;
//return super.getBackground();
}
}
当然,使用ImageView也没有用。结果完全一样。
<ImageView
android:layout_width="wrap_content"
android:id="@+id/imageView1"
android:layout_height="wrap_content"
android:src="@drawable/lightbulb"
></ImageView>
这是代码
final ImageView imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setAlpha(alphaValue);
那么,在Android中执行此操作的最佳方式是什么?
这就是我做的。有关更多详细信息,请参阅接受的答案(@Petrus):
<FrameLayout
android:id="@+id/frameLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ImageView
android:layout_height="wrap_content"
android:src="@drawable/lightbulb_content"
android:layout_width="wrap_content"
android:id="@+id/bulbContent"
></ImageView>
<ImageView
android:layout_height="wrap_content"
android:src="@drawable/lightbulb"
android:layout_width="wrap_content"
android:id="@+id/bulb"
></ImageView>
</FrameLayout>
在代码中:
final ImageView bulbContent = (ImageView) findViewById(R.id.bulbContent);
//Where I need to set the alpha
int alphaValue = /*Some calculation*/
normalView.getBackground().setAlpha(alphaValue);
bulbContent.setAlpha(alphaValue);
这里,lightbulb.png是一个只有灯泡轮廓的图像; lightbulb_content.png是一个带有灯泡“内容”的图像。
答案 0 :(得分:1)
我会使用两个图像,一个带有灯泡轮廓,另一个带有你要调整alpha的内容。 然后在FrameLayout中使用ImageViews添加两个图像。首先添加要调整的图像,然后添加轮廓图像。确保两个图像具有完全相同的像素尺寸。
这样您可以调整底部图像(灯泡)上的alpha并保持轮廓(顶部图像)不变。
祝你好运。