2011-10-12 5 views
8

私はSeekBarをカスタマイズしました - 私は背景としてカスタムイメージを使用し、親指としてカスタムイメージを使用します(How to create custom layout for seekbar in android? & How to customize the look of a SeekBar in Android?)。SeekBarのカスタマイズ - カスタム "サム"イメージを適切に配置する方法は?

アイデアは、このイメージでのもののように見えるのSeekBarを作ることです。

enter image description here

私はprogress値が0に設定されている場合、親指の画像は、丸みを帯びたバーに完璧にフィットさせたいですまたは100(100のうち)。正しく親指を位置決めするために

(すなわち、バーの端部と重ならない)私は、親指幅(Android: Seekbar doesn't scroll all the way to end)の丁度半分の幅にpaddingLeft & paddingRight値を設定しています。

.../RES /レイアウト/ main.xml:

<SeekBar android:id="@+id/frequency_slider" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:max="100" android:progress="0" 
    android:progressDrawable="@drawable/seekbar_no_visible_progress" 
    android:thumb="@drawable/seekbar_thumb" <!-- this is an image --> 
    android:background="@drawable/hos_bar" <!-- this is an image --> 
    android:paddingLeft="24dp" 
    android:paddingRight="24dp"> 
</SeekBar> 

これは、Android 2.1で動作します。アンドロイド2.2で


これは、異なる効果生成:

enter image description here

さらに調査した後

(と私は親指の画像の位置ということを発見した、完全にデフォルトSeekBarでこれをしようとし2.1から2.2に変更されました。paddingLeft & paddingRightの変更のハックは問題ではありません。

  • 2.1では、親指はバーの端を中心に、親指の半分はバーに、半分はバーから外れています。
  • 2.2では、親指がバーの中に重ならずに配置されています。したがって、パディング値が結果に影響を与える奇妙な方法です。これは私が達成しようとしていたものですが、カスタムサムを使用すると、このエフェクトは同じように機能しなくなります。

私は事のこのタイプを処理するカスタムJavaクラスを作成する必要があると思います。この質問(Possible to do rounded corners in custom Progressbar progressDrawable?)では、通常の進行状況バーを作成するために、開発者はClipDrawableを使用します。

どのようなタイプのドロアブルオブジェクトを使用しますか?そして、私の親指を正確に配置するにはどうすればいいですか?

答えて

5

thumbOffsetパラメータの挙動は、これらの2つのバージョンの間で変化しています。 ThumbOffsetは、提供された位置パラメータと比較して、サム画像の実際のオフセットを決定します。

1

は、これを使用してみてください:

<SeekBar android:id="@+id/seek" 
     android:layout_width="fill_parent" 
     android:layout_height="73dip" 
     android:max="80" 
     android:progress="12" 
     android:maxWidth="273dip" 
     android:maxHeight="73dip" 
     android:secondaryProgress="255" 
     android:background="@drawable/image2"  <!-- this is an image --> 
     android:progressDrawable="@drawable/image1" <!-- this is an image --> 
     android:thumb="@drawable/lock_thumb"        
     /> 

私はこれを試してみました、それは2.1と2.2と完璧に働いていました。

あなたの場合は、maxWidth、max、およびprogressを調整して、パディングを削除してみてください。問題の解決に役立つかもしれません。

enter image description here

+0

ありがとうございました。私は私の質問を更新しました。私が望んでいない効果はまだ残っています(標準のSeekBarでも)。進捗値が0または最大に設定されている場合、バーの各丸い端に親指イメージをうまく収めるようにしたいと思います。 –

10
seekbar.setThumbOffset(0); 

実行時。 XMLからではありません!

解決済みの問題です。

1

が最終的に答えを見つけ、それがを始めてから、それは親指の長さだ、ここでのケースでは、あなたがandroid:thumbOffsetを使用しなければならないということですが、android:thumbOffsetは、プログレスバーと一緒に親指の場所のためのセッターませですが、seekbarは、親指の中心点をその始点で調整できるように、中心点です。我々はの幅を有する親指の画像を持っているのであれば、thumbOffsetはseekbarが親指の画素25ゼロ値を調整するように、(50/2)でなければなりません親指が真ん中にあるように見えるようになります。

関連する問題