seekbar默认的最小值是0,可是现实中许多的时候最小值,却不是0,所以需要自定下。
一个取巧的办法就是,在重写的方法中,自己修改进度值。
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
//设置最小的范围值是: 2
if (seekBar == rangeSB) {
rangtxt.setText((progress+2) + "");
}
}
seekbar查知值的方式,是根据进度的百分比来算的。0-18区间,每份的值与2-20的比重是一样的,所以不存在值的偏差问题。
视图:
value:0
value:18
自定义seekbar ,自定义背景,进度背景和圆点的点击状态。
有个文本视图随着进度而该改变位置。
活动:
public class TestSeekBar extends Activity implements OnSeekBarChangeListener {
private TextView value;
private SeekBar seekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.acy_testseekbar);
initView();
}
public void initView() {
// 获取屏幕的宽度
WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(metrics);
int swidth = metrics.widthPixels;
value = (TextView) findViewById(R.id.tv_showvalue);
seekBar = (SeekBar) findViewById(R.id.sb_mybar);
seekBar.setOnSeekBarChangeListener(this);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(10, 10, 10, 0);
// 边距,根据自己的布局 修改吧
params.leftMargin = 480 * progress / 100 - 20;
// 设置位置
value.setLayoutParams(params);
value.setText(progress / 10 + "");
// 显示
value.setVisibility(View.VISIBLE);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
// 隐藏
value.setVisibility(View.INVISIBLE);
}
}
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_showvalue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:visibility="invisible" />
<SeekBar
android:id="@+id/sb_mybar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/seek_img"
android:thumb="@drawable/thum" />
</LinearLayout>
自定义背景和进度图:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 背景 -->
<item
android:id="@+android:id/background"
android:drawable="@drawable/barpress"/>
<!-- 进度条 -->
<item
android:id="@+android:id/progress"
android:drawable="@drawable/slide_rank"/>
</layer-list>
自定义进度的点:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 按下状态 -->
<item android:drawable="@drawable/barpoint" android:state_pressed="true"/>
<!-- 一般状态 -->
<item android:drawable="@drawable/barpointx" android:state_pressed="false"/>
</selector>