2010-05-12 2 views
114

Прочитав ограниченную документацию, предоставленную Google, я чувствую, что можно изменить внешний вид ProgressBar/ProgressDialog, просто создав новый стиль, присвоив его стилю собственности ProgressBar. Но я не могу заставить это работать правильно. Вот что я сделал до сих пор:Пользовательский Drawable для ProgressBar/ProgressDialog

Я создал форму, как это (mp2.xml)

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="ring" 
    android:innerRadiusRatio="4" 
    android:thicknessRatio="4" 
    android:useLevel="false"> 
<size android:width="50dip" android:height="50dip" /> 
<gradient android:type="sweep" android:useLevel="false" android:startColor="#300000ff" android:centerColor="#500000ff" android:endColor="#ff0000ff" /> 
</shape> 

затем созданную анимацию (mp3.xml), как это:

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="30" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="30" android:toDegrees="60" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="60" android:toDegrees="90" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="90" android:toDegrees="120" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="120" android:toDegrees="150" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="150" android:toDegrees="180" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="180" android:toDegrees="210" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="210" android:toDegrees="240" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="240" android:toDegrees="270" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="270" android:toDegrees="300" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="300" android:toDegrees="330" android:repeatCount="1" /> 
</item> 
<item android:duration="70"> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="330" android:toDegrees="360" android:repeatCount="1" /> 
</item> 
</animation-list> 

затем создал стиль (attrs.xml), как это:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<style parent="@android:style/Widget.ProgressBar" name="customProgressBar"> 
    <item name="android:progressDrawable">@anim/mp3</item> 
</style> 
</resources> 

и в моем main.xml я установить стиль, как это:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:drawingCacheQuality="high"> 
<ProgressBar android:id="@+id/ProgressBar01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" style="@style/customProgressBar"/> 
</LinearLayout> 

Но он все еще показывает то же самое, что и раньше. Что я делаю не так?

+0

Просто случилось, просматривая образцы и наткнулся на твое после прочтения [это] (http://groups.google.com/group/android-developers/browse_thread/нить/51188f7e52a83ded/de8c88581592d059? LNK = raot). Надеюсь, он решает вашу проблему. – reuscam

+0

Я знал, как создавать фигуры/градиент/анимацию. Тот, который я создал выше, основан на публикации, на которую вы ссылаетесь (мне пришлось немного изменить ее, потому что она выглядит очень изменчивой и медленной). Я просто надеялся добиться этого, используя «стиль». Спасибо за reponce в любом случае – Sam

+0

Если вы хотите полностью настроить свой индикатор выполнения и получить действительно фантазию, посмотрите [это сообщение в блоге] (http://www.jagsaund.com/blog/2011/11/6/customizing- ваш-progress-bar-part-one.html) Это может быть немного выше того, что вы хотели или могли бы быть именно тем, что вы ищете. Надеюсь, поможет! – jagsaund

ответ

5

я сделать свой код .i может работать, но мне нужно изменить два места:

  1. name="android:indeterminateDrawable" вместо android:progressDrawable

  2. изменить имя attrs.xml ---> styles.xml

+0

Я попробовал. Это не работает. Выделение не меняется. – Sam

+0

вы измените свой андроид: startColor = "# 300000ff" на # FF00ff00, измените другой цвет – pengwang

131

Для создания пользовательской панели выполнения я использовал следующее.

Файл res/drawable/progress_bar_states.xml объявляет цвета различных состояний:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:id="@android:id/background"> 
     <shape> 
      <gradient 
        android:startColor="#000001" 
        android:centerColor="#0b131e" 
        android:centerY="0.75" 
        android:endColor="#0d1522" 
        android:angle="270" 
      /> 
     </shape> 
    </item> 

    <item android:id="@android:id/secondaryProgress"> 
     <clip> 
      <shape> 
       <gradient 
         android:startColor="#234" 
         android:centerColor="#234" 
         android:centerY="0.75" 
         android:endColor="#a24" 
         android:angle="270" 
       /> 
      </shape> 
     </clip> 
    </item> 

    <item android:id="@android:id/progress"> 
     <clip> 
      <shape> 
       <gradient 
        android:startColor="#144281" 
        android:centerColor="#0b1f3c" 
        android:centerY="0.75" 
        android:endColor="#06101d" 
        android:angle="270" 
       /> 
      </shape> 
     </clip> 
    </item> 

</layer-list> 

а код внутри макета XML:

<ProgressBar android:id="@+id/progressBar" 
    android:progressDrawable="@drawable/progress_bar_states" 
    android:layout_width="fill_parent" android:layout_height="8dip" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:indeterminateOnly="false" 
    android:max="100"> 
</ProgressBar> 

Наслаждайтесь!

+0

удивительный, он даже работает с чертежами таким образом – alkar

+0

работает таким образом, но я не смог заставить его работать с чертежами –

+0

@YuliaRogovaya это потому что drawables не входят в элементы клипа? Я тоже не мог заставить его работать, подозревая, что элемент клипа - это ключ. –

0

Я не уверен, но в этом случае вы все равно можете пойти с полным настроенным AlertDialog, установив отдельный файл макета, заданный в диалоговом окне оповещений, и настройте анимацию для вашего изображения, используя часть вашего вышеуказанного кода, которая также должна делать Это!

10

Ваш стиль должен выглядеть следующим образом:

<style parent="@android:style/Widget.ProgressBar" name="customProgressBar"> 
    <item name="android:indeterminateDrawable">@anim/mp3</item> 
</style> 
27

установка Try:

android:indeterminateDrawable="@drawable/progress" 

Он работал для меня. Здесь также код progress.xml:

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" 
    android:toDegrees="360"> 

    <shape android:shape="ring" android:innerRadiusRatio="3" 
     android:thicknessRatio="8" android:useLevel="false"> 

     <size android:width="48dip" android:height="48dip" /> 

     <gradient android:type="sweep" android:useLevel="false" 
      android:startColor="#4c737373" android:centerColor="#4c737373" 
      android:centerY="0.50" android:endColor="#ffffd300" /> 

    </shape> 

</rotate> 
+0

Спасибо, работал для кругового хода. –

+2

Если вы хотите использовать выталкиваемый, а затем просто 'android: drawable =' в теге вращения, а затем удалите фигуру. Наконец, кто-то, кто отвечает на вопрос о вращающемся шаге прогресса. – MinceMan

+1

Он устанавливает цвет, но индикатор выполнения не вращается. – Crawler

52

Я возникли некоторые проблемы, используя Progress Dialog неопределенных с решением здесь, после некоторой работы и методом проб и ошибок я получил его на работу.

Сначала создайте анимацию, которую вы хотите использовать для диалогового окна «Прогресс». В моем случае я использовал 5 изображений.

../res/anim/progress_dialog_icon_drawable_animation.xml:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/icon_progress_dialog_drawable_1" android:duration="150" /> 
    <item android:drawable="@drawable/icon_progress_dialog_drawable_2" android:duration="150" /> 
    <item android:drawable="@drawable/icon_progress_dialog_drawable_3" android:duration="150" /> 
    <item android:drawable="@drawable/icon_progress_dialog_drawable_4" android:duration="150" /> 
    <item android:drawable="@drawable/icon_progress_dialog_drawable_5" android:duration="150" /> 
</animation-list> 

Где вы хотите, чтобы показать ProgressDialog:

dialog = new ProgressDialog(Context.this); 
dialog.setIndeterminate(true); 
dialog.setIndeterminateDrawable(getResources().getDrawable(R.anim.progress_dialog_icon_drawable_animation)); 
dialog.setMessage("Some Text"); 
dialog.show(); 

Это решение очень просто и работал для меня, вы могли бы расширить и сделать ProgressDialog он переопределяет внутренность, но это было слишком сложно для того, что мне было нужно, поэтому я этого не делал.

+1

Благодарим за замечание «dialog.setIndeterminateDrawable()» – scottyab

+1

@blindstuff благодарю вас за это решение, вы спасли меня много времени. – Zeba

+0

Есть ли способ иметь только изображение в диалоговом окне, так что нет сообщения, но может быть выделено во всем диалоговом окне? – Diego

6

Пользовательский прогресс с помощью шкалы!

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:duration="150"> 
     <scale 
      android:drawable="@drawable/face_no_smile_eyes_off" 
      android:scaleGravity="center" /> 
    </item> 
    <item android:duration="150"> 
     <scale 
      android:drawable="@drawable/face_no_smile_eyes_on" 
      android:scaleGravity="center" /> 
    </item> 
    <item android:duration="150"> 
     <scale 
      android:drawable="@drawable/face_smile_eyes_off" 
      android:scaleGravity="center" /> 
    </item> 
    <item android:duration="150"> 
     <scale 
      android:drawable="@drawable/face_smile_eyes_on" 
      android:scaleGravity="center" /> 
    </item> 

</animation-list> 
Смежные вопросы