Графика Android: изменение альфа только изображения (не фон) - PullRequest
1 голос
/ 27 июля 2011

Я новичок в графике в 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 - изображение с «содержимым» колбы.

1 Ответ

1 голос
/ 27 июля 2011

Я бы использовал два изображения, одно с контуром лампочки, а другое - с содержимым, на которое вы хотите настроить альфа. Затем добавьте два изображения, используя ImageViews в FrameLayout. Сначала добавьте изображение, которое нужно отрегулировать, затем контурное изображение. Убедитесь, что оба изображения имеют одинаковые размеры в пикселях.

Таким образом, вы можете настроить альфа на нижнем изображении (лампочка) и сохранить контур (верхнее изображение) без изменений.

Удачи.

...