Я новичок в графике в 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 представляет собой прозрачную графику с черным контуром лампы.Теперь, что происходит, когда я устанавливаю альфа на более низкое значение (ближе к 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 - изображение с «содержимым» колбы.