Как изменить передний план и фоновое изображение с помощью кода?
Я определяю изображение переднего плана и фоновое изображение в панели поиска. Теперь он может хорошо отображать передний план и фон в поиске.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- background picture -->
<item android:id="@android:id/background"
android:drawable="@drawable/back" />
<!-- energy diagram -->
<item android:id="@android:id/progress"
android:drawable="@drawable/fill" />
</layer-list>
Как я могу понять, как изменить изображение переднего плана и фоновое изображение, используя код Java?
2 ответа
Решение
XML-МАКЕТ-WISE
seekbar_progress.xml, поместите его в папку /res/drawable/:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<nine-patch
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/seekbar_background"
android:dither="true"
/>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<gradient
android:startColor="#80028ac8"
android:centerColor="#80127fb1"
android:centerY="0.75"
android:endColor="#a004638f"
android:angle="270"
/>
</shape>
</clip>
</item>
<item
android:id="@android:id/progress"
android:drawable="@drawable/seekbar_progress_bg"
/>
</layer-list>
SeekBar
<SeekBar
android:id="@+id/frequency_slider"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="20"
android:progress="0"
android:secondaryProgress="0"
android:progressDrawable="@drawable/seekbar_progress"
android:thumb="@drawable/seek_thumb"
/>
Программный
// ------------ custom seekbar
LayerDrawable layer = (LayerDrawable) verticalSeekBar_1.getProgressDrawable();
Drawable draw1 = (Drawable)layer.findDrawableByLayerId(android.R.id.progress);
Bitmap bitmap1 = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.scroll_on);
draw1 = new ClipDrawable(new BitmapDrawable(bitmap1), Gravity.AXIS_PULL_BEFORE, ClipDrawable.HORIZONTAL);
layer.setDrawableByLayerId(android.R.id.progress, draw1);
Drawable draw2 = (Drawable) layer.findDrawableByLayerId(android.R.id.background);
Bitmap bitmap2 = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.scroll_off);
draw2 = new BitmapDrawable(bitmap2);
layer.setDrawableByLayerId(android.R.id.background, draw2);
layer-list
XML-ресурс на самом деле создает LayerDrawable
пример. Вы можете изменить его слои, используя setDrawableByLayerId
метод или создать новый нарисованный экземпляр с любыми слоями, которые вы хотите.