[android-group-japan: 4064] SeekBarの右側をmin左側をMaxにしたい。

1,031 views
Skip to first unread message

サンドボックス@東原

unread,
May 9, 2010, 10:00:21 PM5/9/10
to 日本Androidの会
いつもお世話になっております。

SeekBarは通常、左側がmin、右側がMaxになってますが
これを右側をmin左側をMaxにしたいです。

SeekBar自体を反転させればいいと思いましたがImageではなくWeigetをどう反転させるのかわかりませんでした。

もしくはSeekBarをExtendsしてオリジナルのSeekBarクラスを作る方法もあるようですが経験不足でSDKのソースのメソッドをどこか
ら見れば良いのかも分かりません。

SeekBarの右側をmin左側をMaxにする方法をご存知の方いらしましたら、ご教授のほどよろしくお願いします。

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。

Yuki Anzai

unread,
May 9, 2010, 10:21:05 PM5/9/10
to android-g...@googlegroups.com
東原様

 あんざいです。

 値自体は
 
 Max値 - position の値

 で左右反対の値が取れると思います。

 デザインについては、
 SeekBar のデフォルトの色などは
 frameworks/base/core/res/res/values/theme.xml
 の Theme という style の
 <item name="seekBarStyle">@android:style/Widget.SeekBar</item>
 で指定されています。
 この Widget.SeekBar の style は同じディレクトリの style.xml に
 定義されています。
 
<style name="Widget.SeekBar">
<item name="android:indeterminateOnly">false</item>
<item
name="android:progressDrawable">@android:drawable/progress_horizontal</item>
<item
name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
<item name="android:minHeight">20dip</item>
<item name="android:maxHeight">20dip</item>
<item name="android:thumb">@android:drawable/seek_thumb</item>
<item name="android:thumbOffset">8dip</item>
<item name="android:focusable">true</item>
</style>

 ここの thumb というのはつまみの画像を指定しています。
 で、progressDrawable と indeterminateDrawable が 棒の部分の色を
 定義しています。
 
 この drawable/progress_horizontal.xml は次のようになっていて
 id:background の部分と id:progress の部分を入れ替えれば、
 色が反対(デフォルトだと灰色と黄色の部分が反対)になります。


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

<item android:id="@android:id/background">
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#ff9d9e9d"
android:centerColor="#ff5a5d5a"
android:centerY="0.75"
android:endColor="#ff747674"
android:angle="270"
/>
</shape>
</item>

<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#80ffd300"
android:centerColor="#80ffb600"
android:centerY="0.75"
android:endColor="#a0ffcb00"
android:angle="270"
/>
</shape>
</clip>
</item>

<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#ffffd300"
android:centerColor="#ffffb600"
android:centerY="0.75"
android:endColor="#ffffcb00"
android:angle="270"
/>
</shape>
</clip>
</item>

</layer-list>



 これで反対っぽくみせることはできると思います。
 根本的に直したいなら ProgressBar を継承して AbsSeekBar みたいなのを
 作るしかないと思います。

 参考になれば幸いです。

サンドボックス@東原

unread,
May 10, 2010, 7:23:01 AM5/10/10
to 日本Androidの会
あんざい様

回答ありがとうございます。

上記内容を参考に右側がmin、左側がMaxのSeekBarを無事に実装出来ました。
とても分かりやすかったです。

右側Max,左側Max両方切り替えできるように実装できました。
またXperiaだと標準でSeekBarが青色になるので他機種対応も考え黄色に統一しました。

どうもありがとうございます。
助かりました。
Reply all
Reply to author
Forward
0 new messages