说起星级评分,最先想到的就是ratingbar...但是实在是不好用,UI适配起来太麻烦...(我使用的屏幕适配方案是像素缩放万能式,就是所有布局文件里不用dp,全用px)... 所以在网上找了找seekbar的自定义,决定使用这个.
首先先在布局文件里定义一个seekbar
<SeekBar
android:id="@+id/item_evaluate_list_sbr_level"
android:layout_width="420px"
android:layout_height="86px"
android:background="@drawable/evaluate_zero_stars"
android:max="100"
android:progress="25"
android:layout_marginRight="30px"
android:progressDrawable="@null"
android:thumb="@null"
android:thumbOffset="@null"
android:visibility="visible"/>
图片我准备了这几张:
什么?你想要半星?...自己改去..
接下来是重点,seekbar的监听:
sbrLevel.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
String level = "";
if (progress >= 0 && progress <= 20) {
level = "1";
seekBar.setBackgroundResource(R.drawable.evaluate_one_stars);
} else if (progress > 20 && progress <= 40) {
level = "2";
seekBar.setBackgroundResource(R.drawable.evaluate_two_stars);
} else if (progress > 40 && progress <= 60) {
level = "3";
seekBar.setBackgroundResource(R.drawable.evaluate_three_stars);
} else if (progress > 60 && progress <= 80) {
level = "4";
seekBar.setBackgroundResource(R.drawable.evaluate_four_stars);
} else {
level = "5";
seekBar.setBackgroundResource(R.drawable.evaluate_five_stars);
}
mList.get(position).setLevel(level);
}
});
嗯,原理就是通过进度,改变seekbar的背景图片~~...
这用着舒服多了,星星的间距,大小,样式统统扔给美工...哈哈哈哈哈