2017-01-23 9 views
6

私は、最終的にアニメーションを逆転させる、水平で不確定なProgressBarを達成しようとします。明確にするために、プログレスバーのアニメーションを0から100まで、その後は100から0に戻したいと思います。 ここにa video of the standard animationがあります。ProgressBar.Horizo​​ntal indeterminateの動作を変更します

documentation of ProgressBarによると、これはxmlでも可能ですが、これは達成できません。あなたがここ

(これは私が欲しいものである)繰り返し(?標準)またはサイクルを設定するかは、私の実装です:

しかし max-value、および異なる style-parents

で試してみました

<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" /> 

、私は値android:indeterminateDuration="[value]"を見つけ、1秒に1を、10秒にもう1秒を設定しました。結局、どちらのプログレスローダーも同じ長さだったので、スタイルがどこかで上書きされるかもしれないという考えが私に残りましたか?

誰でもこれを解決する方法を知っていますか?

バウンティ更新:質問indeterminateBehaviourはあなたが知られている要素に応じてプログラムで行うだろう、イベントを追加することができます

+0

使用して、あなたのレイアウトにこれを追加します?ATTR/progressBarStyleHorizo​​ntalを「? –

+0

@TimCastelijns:実際、私は知らない。それが標準的なアンドロイドの親です。その値を調べる方法はわかりません。 -/ – longilong

+0

あなたはこれを見ましたか?http://stackoverflow.com/a/6450417/1185737 – KunalK

答えて

0

を働いている作業例えば、解く:

progressBar.setIndeterminate(true); 

または

progressBar.setIndeterminate(false); 

どのようなスタイルを考慮するかは、提示されたデータの分析に完全に依存します。

あなたは、常に不確定することと行動の一貫期待されるスタイルを持っているとしているわかっている場合、これらのXMLプロパティを追加します。

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

私はProgressBarでアニメーターを変更する方法を見つけることができませんでしたので、私自分のドローイングと一緒に行くことをお勧めします。

res/drawable/vector_drawable_progress_indeterminate_horizontal.xml(名前core/res/res/drawable/vector_drawable_progress_indeterminate_horizontal.xmlに触発さ)

<?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> 

は、水平方向のスケールをアニメーション:

の矩形のように見える進展を作ってみよう、長方形簡単な例で

として進捗状況を描きます

もちろん、この矩形はアニメーション化されていないので、あなたはそれをオブジェクトにラップしたいと思いますそれは水平スケールです(scaleXrect1_grp)。

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> 

行うには残っている唯一のことは、あなた自身のアニメーションを持つことです。

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> 

アニメーションが直線1Fへ0Fからスケールを成長、リバースモード(2つのアニメーターのシーケンスを持たないように無限に繰り返す:1つはスケールの増加、もう1つはdecr簡単)。

は今

をお楽しみください、あなたがしなければならないすべてはres/layout/activity.xmlでこの描画可能を使用している:

<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" /> 

  • を行うために、私は最低限に進捗状況を剥奪。あなたは背景を描くことができます。セカンダリの進捗状況を復元することもできます。
  • アニメーションのインターポレータをカスタマイズすることができます。
+0

基本的に、 'android: indeterminateBehavior = "サイクル"と 'android:indeterminateDuration =" 10000 "'?これらの値がデバイスの設定やスタイルで上書きされてしまうのではないかと思っていました。 – longilong

0

あなたは多分続くことができる別のアプローチは、確定的なスタイルを使用し、0から100まで及び100から再び0に:値を設定することです

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

私は、このソリューションはより少ないエレガントだと思いますhaving a custom inderminateDrawble、これはこの偽の進捗状況を更新する必要があるためです。

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> 

は `スタイル="アンドロイドから継承されているどのような値がこの描画可能

Look at this picture

関連する問題