Android图形:更改图像的alpha(不是背景)

时间:2011-07-27 07:03:16

标签: android graphics bitmap alpha

我是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是一个带有灯泡“内容”的图像。

1 个答案:

答案 0 :(得分:1)

我会使用两个图像,一个带有灯泡轮廓,另一个带有你要调整alpha的内容。 然后在FrameLayout中使用ImageViews添加两个图像。首先添加要调整的图像,然后添加轮廓图像。确保两个图像具有完全相同的像素尺寸。

这样您可以调整底部图像(灯泡)上的alpha并保持轮廓(顶部图像)不变。

祝你好运。