资源描述
Android的SeekBar
博客分类:
· Android
使用SeekBar的时候,经常遇到的问题有如下:
1. seekbar的拖动按钮没有居中。
2. seekbar的高度有问题。
3. seekbar的拖动按钮在最左最右显示不全。
首先,要解决上述问题,要先检查layout文件在描述seekbar时,有没有正确设置图片的尺寸和检查屏幕密度与图片是否放置在相应的drawable文件夹中(drawable-hdpi, drawable-mdpi, drawable-ldpi).
在确保图片资源正确的情况下,参考如下XML:
layout
Xml代码
1. <SeekBar
2. android:layout_width="321px"
3. android:layout_height="wrap_content"
4. android:layout_centerInParent="true"
5. android:maxHeight="12px"
6. android:minHeight="12px"
7. android:paddingLeft="18px"
8. android:paddingRight="18px"
9. android:max="100"
10. android:progressDrawable="@drawable/seekbar_style"
11. android:thumb="@drawable/drag_ball"
12. android:id="@+id/seekBar"/>
<SeekBar
android:layout_width="321px"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:maxHeight="12px"
android:minHeight="12px"
android:paddingLeft="18px"
android:paddingRight="18px"
android:max="100"
android:progressDrawable="@drawable/seekbar_style"
android:thumb="@drawable/drag_ball"
android:id="@+id/seekBar"/>
seekbar_style
Xml代码
1. <layer-list
2. xmlns:android="
3. <item
4. android:id="@android:id/background"
5. android:drawable="@drawable/drag_bar_background"/>
6. <item
7. android:id="@android:id/progress"
8. android:drawable="@drawable/drag_bar_foreground"/>
9. <item
10. android:id="@android:id/secondaryProgress"
11. android:drawable="@drawable/drag_bar_foreground"/>
12. </layer-list>
<layer-list
xmlns:android="
<item
android:id="@android:id/background"
android:drawable="@drawable/drag_bar_background"/>
<item
android:id="@android:id/progress"
android:drawable="@drawable/drag_bar_foreground"/>
<item
android:id="@android:id/secondaryProgress"
android:drawable="@drawable/drag_bar_foreground"/>
</layer-list>
简单解释下seekbar中几个重要的属性:
android:layout_height="wrap_content"
//建议使用wrap_content,否则一定要保证设置的值不小于seekbar图片资源中的最高值
android:maxHeight="12px"
android:minHeight="12px"
//说明进度条的最低和最大高度,解决高度问题。
android:paddingLeft="18px"
android:paddingRight="18px"
//解决拖动按钮在最左最右显示不全的问题,padding的值一般是thumb的一半宽度。
android:progressDrawable="@drawable/seekbar_style"
//设置了此值,就表示使用自定义的进度条样式,在其中可以设置进度条背景图,进度条图,缓冲条图。
android:thumb="@drawable/drag_ball"
//seekbar的拖动按钮图片
android系统自带的自定义样式例子:
seekbar_style
Xml代码
1. <layer-list xmlns:android="
2. <item android:id="@android:id/background">
3. <shape>
4. <corners android:radius="5dip" />
5. <gradient
6. android:startColor="#ff9d9e9d"
7. android:centerColor="#ff5a5d5a"
8. android:centerY="0.75"
9. android:endColor="#ff747674"
10. android:angle="270"/>
11. </shape>
12. </item>
13. <item android:id="@android:id/secondaryProgress">
14. <clip>
15. <shape>
16. <corners android:radius="5dip" />
17. <gradient
18. android:startColor="#80ffd300"
19. android:centerColor="#80ffb600"
20. android:centerY="0.75"
21. android:endColor="#a0ffcb00"
22. android:angle="270"/>
23. </shape>
24. </clip>
25. </item>
26. <item android:id="@android:id/progress">
27. <clip>
28. <shape>
29. <corners android:radius="5dip" />
30. <gradient
31. android:startColor="#ff0099CC"
32. android:centerColor="#ff3399CC"
33. android:centerY="0.75"
34. android:endColor="#ff6699CC"
35. android:angle="270"/>
36. </shape>
37. </clip>
38. </item>
39. </layer-list>
<layer-list xmlns: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="#ff0099CC"
android:centerColor="#ff3399CC"
android:centerY="0.75"
android:endColor="#ff6699CC"
android:angle="270"/>
</shape>
</clip>
</item>
</layer-list>
thumb
Xml代码
1. <selector xmlns:android="
2.
3. <!-- 按下状态-->
4. <item
5. android:state_focused="true"
6. android:state_pressed="true"
7. android:drawable="@drawable/thumb_pressed" />
8. <!-- 普通无焦点状态 -->
9. <item
10. android:state_focused="false"
11. android:state_pressed="false"
12. android:drawable="@drawable/thumb_normal" />
13. <!-- 有焦点状态-->
14. <item
15. android:state_focused="true"
16. android:state_pressed="false"
17. android:drawable="@drawable/thumb_focused" />
18. <!-- 有焦点 -->
19. <item
20. android:state_focused="true"
21. android:drawable="@drawable/thumb_focused" />
22. </selector>
Android SeekBar
2011-09-15 15:12:08 我来说两句
收藏 我要投稿
SeekBar可以作为音乐播放器的进度指示和调整工具,音量调整工具等,SeekBar是ProgressBar的一个子类,下面我们用一个可以改变并显示当前进度的拖动条例子来演示一下它的使用:
1、main.xml
Java代码
<?xml version= "1.0" encoding= "utf-8" ?>
<LinearLayout xmlns:android="
android:orientation="vertical" android:layout_width= "fill_parent"
android:layout_height="fill_parent" >
<SeekBar android:id="@+id/SeekBar01" android:layout_width= "245px"
android:layout_height="25px" android:paddingLeft= "16px"
android:paddingRight="15px" android:paddingTop= "5px"
android:paddingBottom="5px" android:progress= "0" android:max= "0"
android:secondaryProgress="0" />
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text= "@string/hello"
android:id="@+id/TextView01" />
</LinearLayout>
2、java:
Java代码
package com.esri.arcgis.sample;
import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
public class AndroidSeekBar extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
// 找到拖动条和文本框
final SeekBar sb = (SeekBar) findViewById(R.id.SeekBar01);
final TextView tv1 = (TextView) findViewById(R.id.TextView01);
// 设置拖动条的初始值和文本框的初始值
sb.setMax(100 );
sb.setProgress(30 );
tv1.setText("当前进度:" + sb.getProgress());
// 设置拖动条改变监听器
OnSeekBarChangeListener osbcl = new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
tv1.setText("当前进度:" + sb.getProgress());
Toast.makeText(getApplicationContext(), "onProgressChanged" ,
Toast.LENGTH_SHORT).show();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Toast.makeText(getApplicationContext(), "onStartTrackingTouch" ,
Toast.LENGTH_SHORT).show();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Toast.makeText(getApplicationContext(), "onStopTrackingTouch" ,
Toast.LENGTH_SHORT).show();
}
};
// 为拖动条绑定监听器
sb.setOnSeekBarChangeListener(osbcl);
}
}
3、运行程序:
展开阅读全文