2017-01-23 38 views
6

Sonunda animasyonunu tersine çevirecek yatay belirsiz bir ProgressBar elde etmeye çalışıyorum. Açıklığa kavuşturmak için, ilerleme çubuğunun 0'dan 100'e ve sonradan 100'den 0'a geri dönmesini istiyorum. Burada geri dönmek istediğim a video of the standard animation.Change ProgressBar.Horizontal belirsiz Davranış

documentation of ProgressBar'a göre, bu xml ile mümkün olabilir, ancak bunu başaramıyorum. Ancak

<ProgressBar 
    android:id="@+id/progressBar" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="8dip" 
    android:indeterminate="true" 
    android:indeterminateOnly="true"  //tried "false" too 
    android:indeterminateBehavior="cycle" // type "reverse" is the one from linked video? 
    android:max="100" /> 

max-value ile çalıştı ve style-parents

farklı: Ya

İşte benim uygulaması var (bu benim istediğim şey) tekrar (? Standart) veya döngüsünü ayarlayabilirsiniz android:indeterminateDuration="[value]" değerini buldum ve birini 1second, diğeri ise 10 saniye olarak ayarladı. Sonunda, her iki ilerici de aynı boyuta sahipti, bu da beni düşünceden uzaklaştırarak, üslupların bir yere yazılabilir mi ?!

Bunu nasıl düzelteceğini bilen var mı?

Bounty Güncelleme: Soru indeterminateBehaviour Bilinen faktörlere bağlı olarak programlı yapacağını Etkinlik eklemek olabilir

+0

android kullanır düzeninize bu eklemek "'? –

+0

@TimCastelijns: Aslında bilmiyorum. Bu standart android ebeveyn. Bu değerlere nasıl bakacağım konusunda hiçbir fikrim yok: -/ – longilong

+0

Buna baktınız: http://stackoverflow.com/a/6450417/1185737 – KunalK

cevap

0

çalışan bir çalışma örneğin çözüldü:

progressBar.setIndeterminate(true); 

veya

hangi tarzın tamamen göz önünde bulundurulduğuna dair sunulan verilerin analizine bağlıdır.

seçeneğin her zaman bu xml özelliklerini eklemek belirsiz olacak ve davranış sürekli beklenen stili var olduğunu biliyorsanız:

android:indeterminate="true" 
android:indeterminateDrawable="@drawable/progress_indeterminate_horizontal" 
android:indeterminateOnly="false" 
0

ben ProgressBar yılında animatör nasıl değiştirileceği bulamadık, bu yüzden Kendi çekilişini kullanmanı öneririm.

res/drawable/vector_drawable_progress_indeterminate_horizontal.xml (isim core/res/res/drawable/vector_drawable_progress_indeterminate_horizontal.xml esinlenerek)

<?xml version="1.0" encoding="utf-8"?> 
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:height="10dp" 
    android:width="100dp" 
    android:viewportHeight="10" 
    android:viewportWidth="100" > 
     <group 
      android:name="rect1_grp" 
      android:scaleX="1" > 
      <path 
       android:pathData="M 0,0 h 100 v 10 h -100 Z" 
       android:fillColor="?attr/colorControlActivated" /> 
     </group> 
</vector> 

yatay ölçeğini canlandırın:

en dikdörtgen gibi bakmak ilerleme yapalım, bir dikdörtgenin önemsiz bir örnekte

olarak ilerlemeyi çizin

Tabii ki, bu dikdörtgen hiçbir şekilde animasyonlu değil, bu yüzden onu bir nesneye sarmak istersiniz ges yatay skaladır (rect1_grp'un scaleX).

res/anim/progress_indeterminate_horizontal_rect1:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <objectAnimator 
     android:duration="1500" 
     android:propertyName="scaleX" 
     android:valueFrom="0" 
     android:valueTo="1" 
     android:valueType="floatType" 
     android:repeatMode="reverse" 
     android:repeatCount="infinite"/> 

</set> 

animasyon 1f 0f doğrusal ölçeği büyüdükçe

res/drawable/custom_progress.xml

<?xml version="1.0" encoding="utf-8"?> 
<animated-vector android:drawable="@drawable/vector_drawable_progress_indeterminate_horizontal" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <target 
     android:animation="@anim/progress_indeterminate_horizontal_rect1" 
     android:name="rect1_grp"/> 
</animated-vector> 

yapmak için sol tek şey, olması için kendi animasyon ve bir ters mod ile sonsuz sayıda tekrarlanır (iki animatörden oluşan bir diziye sahip olmaktan kaçınır: biri ölçek artışı için, diğeri de decr için kolaylaştırmak).

<ProgressBar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="8dip" 
    android:indeterminate="true" 
    android:indeterminateDrawable="@drawable/custom_progress" /> 

Sol çıplak minimuma ilerleme elimden

  • yapmalı:

    yapmanız gereken tüm res/layout/activity.xml bu çizilebilir kullanmaktır, Şimdi

    keyfini çıkarın. Bir arka plana sahip olmak isteyebilirsiniz. İkincil ilerlemeyi de geri yüklemek isteyebilirsiniz.
  • Enterpolator'u animasyonda özelleştirebilirsiniz.
+0

Temel olarak, 'android yerine özel animasyon kullanın: indeterminateBehavior = "cycle" ve android: indeterminateDuration = "10000" '? Bu değerlerin cihaz ayarları veya stili ile üzerine yazılıp yazılmayacağını merak ettim, bu yüzden onları işe yaratamamama neden olan bir geri çekilme mi? – longilong

0

belki takip edebilirsiniz başka bir yaklaşım bir oturak stil kullanmak ve 0 ile 100 ve 100 den tekrar 0'a .: değerlerini ayarlamaktır

setProgress(100); 
    // sleep animation duration 
    setProgress(0); 
    // sleep animation duration 
    // repeat 

ben bu çözüm daha az zarif olduğunu düşünüyorum having a custom inderminateDrawble, çünkü bu sahte ilerleme güncellemelerini gerektiriyor. ? Özn/progressBarStyleHorizontal:

0

 <ProgressBar 
     android:id="@+id/pbProcessing" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/frame_getgas" 
     android:indeterminateOnly="true"/> 
2
<layer-list> 
<item android:id="@android:id/background"> 
    <shape> 
     <corners android:radius="2dip" /> 
     <gradient android:startColor="#43ffffff" android:centerColor="#43ffffff" android:centerY="0.75" android:endColor="#43ffffff" android:angle="270" /> 
    </shape> 
</item> 
<item android:id="@android:id/progress"> 
    <clip> 
     <shape> 
      <corners android:radius="2dip" /> 
      <gradient android:startColor="#fff" android:endColor="#fff" android:angle="270" /> 
     </shape> 
    </clip> 
</item> 

bu çekilebilir

Look at this picture "= tarzı` dan devralınan hangi değerleri