1

9 つのパッチ イメージを使用して、独自のカスタム プログレスバーを実装しようとしています。Sound ProgressBar の例を見ています。 http://www.jagsaund.com/blog/2011/11/6/customizing-your-progress-bar-part-one.html

なぜそれが起こっているのか理解できなかった2つの問題があります。

  1. プログレスバーがlayerdrawableのインスタンスではないことを何をしても、なぜこれが起こっているのかわからないので、必要なレイヤーへの参照を取得して文法的に変更することができません。

  2. 9 パッチ イメージは、コンテナーの幅全体 (relativelayout) に引き伸ばされて始まります。自動的にスケーリングしないように指示する方法がわからないため、その幅を文法的に制御できます。

以下にコード スニペットを示します。

ドローアブル プログレスバー.xml

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@android:id/background"
        android:drawable="@drawable/progressbar_bg" >
  </item>
  <item android:id="@+id/progress">
    <bitmap
      android:src="@drawable/progressbar"
      android:tileMode="repeat" />
  </item>
</layer-list>

スタイル.xml

<style name="Widget">
</style>

<style name="Widget.ProgressBar">
    <item name="android:indeterminateOnly">true</item>
    <item name="android:indeterminateBehavior">repeat</item>
    <item name="android:indeterminateDuration">3500</item>
    <item name="android:minWidth">48dip</item>
    <item name="android:maxWidth">48dip</item>
    <item name="android:minHeight">48dip</item>
    <item name="android:maxHeight">48dip</item>
</style>


<style name="Widget.ProgressBar.RegularProgressBar">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:progressDrawable">@drawable/progressbar</item>
    <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
    <item name="android:minHeight">1dip</item>
    <item name="android:maxHeight">10dip</item>
</style>

XML レイアウト ファイル内のカスタム ビュー:

<com.custom.ahmad.views.NfcProgressBar
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/timeOutProgress"
    android:layout_above="@+id/tvStart"
style="@style/Widget.ProgressBar.RegularProgressBar" />

最後に、カスタム プログレスバー クラス:

public class NfcProgressBar extends ProgressBar {

private String text = "";
private int textColor = Color.BLACK;
private float textSize = 15;

public NfcProgressBar(Context context) {
    super(context);
}

public NfcProgressBar(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public NfcProgressBar(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected synchronized void onDraw(Canvas canvas) {

Drawable progressDrawable = this.getProgressDrawable();
    Log.i("Testing", "progressDrawable : " + ((progressDrawable != null) ? progressDrawable : "null"));
    Log.i("Testing", "progressDrawable instanceof LayerDrawable : " + ((progressDrawable instanceof LayerDrawable)? "true" : "false"));
    if (progressDrawable != null && progressDrawable instanceof LayerDrawable) {
        // Get the layer and do some programming work.
    }
}
4

0 に答える 0