Установить возможность рисования фона (программно)?

#android

#Android

Вопрос:

В моем приложении у меня есть что-то вроде этого:

Button playBtn = (Button) findViewById(R.id.play);
ProgressBar pb1 = new ProgressBar(this);
playBtn.setBackgroundDrawable(pb1);

Но это не работает. И я знаю почему, — pb1 не является возможностью рисования. Но как иначе я могу установить фон моей кнопки воспроизведения на индикатор выполнения? Я использую программный способ создания индикатора выполнения, и у меня есть кнопка воспроизведения в моем ресурсе .xml.

Ответ №1:

Ах, вы действительно не можете сделать то, что пытаетесь сделать: нет способа использовать один вид в качестве фона другого вида.

Что вы можете сделать, это нечто подобное тому, что делает индикатор заряда батареи Android в области уведомлений: создайте несколько отображаемых объектов (я думаю, что индикатор заряда батареи использует 5 или 6 разных изображений, по 1 для каждого этапа процесса перезарядки), а затем используйте таймер или внешние события для переключения отображения фона для вашей кнопки: это имитирует индикатор выполнения.

Дайте мне знать, если это поможет.

Комментарии:

1. Это будет непросто… У меня есть потоковый проигрыватель с множеством методов. Во время загрузки песни индикатор выполнения отображается отдельно в той же строке, в которой отображаются кнопки «Предыдущая», «воспроизвести» и «следующая». Но это не выглядит красиво… Когда песня загружается, я хочу заменить кнопку воспроизведения индикатором выполнения. Когда он загружен, кнопка воспроизведения заменяет индикатор выполнения обратно.

2. Затем измените видимость кнопки воспроизведения на » GONE использование setVisibility » и видимость панели прогресса на » VISIBLE во время воспроизведения»; затем установите для кнопки воспроизведения значение » VISIBLE and the ProgressBar to ПРОПАЛ», когда она не воспроизводится.

3. Ах, вы пытаетесь заменить, А не установить его в качестве фона. Поместите индикатор выполнения и кнопку воспроизведения в ViewSwitcher (см. developer.android.com/reference/android/widget / … ) и поместите это там, где сейчас находится кнопка воспроизведения. Затем вы можете переключаться с одного на другой по требованию.

4. @Joseph Earl, звучит неплохо, я попытаюсь это сделать, хотя я не уверен, где изначально разместить индикатор выполнения.

5. ViewSwitcher заботится о расположении: они занимают одинаковое пространство, и одновременно виден только один.

Ответ №2:

Сделайте прозрачную кнопку (background =»@null») и разместите ее на панели прогресса, используя RelativeLayout или FrameLayout.

Это проще, чем кажется:

  <FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_gravity="center"
        android:background="@null"
        android:textColor="@android:color/white"
        android:text="asdasd"/>
</FrameLayout>
  

Сделайте то же самое в коде, если хотите.

Комментарии:

1. обновлено … надеюсь, это поможет, как сделать это проще, к сожалению, я не знаю

Ответ №3:

Вы уверены, что вам нужно Button здесь? Mb достаточно разместить ProgressBar only и сделать его интерактивным с помощью настройки onClickListener .

Комментарии:

1. Да нет, у меня полноценный плеер, без кнопочек никак не обойтись =)

2. Да сделай ты обычную красивую кнопку со статическим бэкграундом и не парься 🙂

3. Так и сделала. В определенное время давала visible для одно и invisible для другого 😉