Android2.3支持RatingBar垂直的问题,setRating不能设置
在Android4.0里可以直接对RatingBar进行垂直的操作,但是在Android2.3里面却没有这个功能 ,所以我们须要重新进行改写,代码见下面,但是改写后存在一个问题,就是setRating设置有问题,不能设置出来,请问有没有高手帮我解答一下。
public class VerticalRatingBar extends RatingBar {
private int x, y, z, w;
@Override
protected void drawableStateChanged() {
// TODO Auto-generated method stub
super.drawableStateChanged();
}
@Override
public void setStepSize(float stepSize) {
// TODO Auto-generated method stub
super.setStepSize(stepSize);
}
public VerticalRatingBar(Context context) {
super(context);
}
public VerticalRatingBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public VerticalRatingBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
this.x = w;
this.y = h;
this.w = oldw;
this.z = oldh;
super.onSizeChanged(h, w, oldh, oldw);
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec,
int heightMeasureSpec) {
super.onMeasure(heightMeasureSpec, widthMeasureSpec);
setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}
protected void onDraw(Canvas c) {
c.rotate(-90);
c.translate(-getHeight(), 0);
super.onDraw(c);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isEnabled()) {
return false;
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
setSelected(true);
setPressed(true);
break;
case MotionEvent.ACTION_MOVE:
setProgress(getMax()
- (int) (getMax()*event.getY()/getHeight()));
onSizeChanged(getWidth(), getHeight(), 0, 0);
break;
case MotionEvent.ACTION_UP:
setSelected(false);
setPressed(false);
break;
case MotionEvent.ACTION_CANCEL:
break;
}
return true;
}
@Override
public synchronized void setProgress(int progress) {
if (progress >= 0)
super.setProgress(progress);
else
super.setProgress(0);
onSizeChanged(x, y, z, w);
}
}
public class VerticalRatingBar extends RatingBar {
private int x, y, z, w;
@Override
protected void drawableStateChanged() {
// TODO Auto-generated method stub
super.drawableStateChanged();
}
@Override
public void setStepSize(float stepSize) {
// TODO Auto-generated method stub
super.setStepSize(stepSize);
}
public VerticalRatingBar(Context context) {
super(context);
}
public VerticalRatingBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public VerticalRatingBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
this.x = w;
this.y = h;
this.w = oldw;
this.z = oldh;
super.onSizeChanged(h, w, oldh, oldw);
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec,
int heightMeasureSpec) {
super.onMeasure(heightMeasureSpec, widthMeasureSpec);
setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}
protected void onDraw(Canvas c) {
c.rotate(-90);
c.translate(-getHeight(), 0);
super.onDraw(c);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isEnabled()) {
return false;
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
setSelected(true);
setPressed(true);
break;
case MotionEvent.ACTION_MOVE:
setProgress(getMax()
- (int) (getMax()*event.getY()/getHeight()));
onSizeChanged(getWidth(), getHeight(), 0, 0);
break;
case MotionEvent.ACTION_UP:
setSelected(false);
setPressed(false);
break;
case MotionEvent.ACTION_CANCEL:
break;
}
return true;
}
@Override
public synchronized void setProgress(int progress) {
if (progress >= 0)
super.setProgress(progress);
else
super.setProgress(0);
onSizeChanged(x, y, z, w);
}
}
...全文
相关推荐
安卓自定义RatingBar,支持整数小数递增递减
安卓自定义星星评分控件RatingBar,支持整数小数递增递减
Android控件之RatingBar自定义星级评分样式
RatingBar为评分条控件,默认效果为若干个绿色的星星,如果想将其换成其他自定义图片就要自定义它的style。接下来通过本文给大家介绍Android控件之RatingBar自定义星级评分样式,感兴趣的朋友一起学习吧
Android星级评分条控件RatingBar使用详解
主要为大家详细介绍了Android星级评分条控件RatingBar的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
android自定义评分控件ratingbar
抛弃原声ratingbar,自定义ratingbar,可以任意改变样式,背景图,间距,大小,总分,全都不是问题
Android自定义View之自定义评价打分控件RatingBar实现自定义星星大小和间距
Android开发中,我们经常会用到对商家或者商品的评价,运用星星进行打分。这篇文章介绍了Android自定义View之自定义评价打分控件RatingBar可以自定义星星大小和间距的相关资料,感兴趣的朋友一起看看吧


