我创建了一个自定义的分级栏,如kozyr所述,当我将分级栏设置为完全和空的可拉伸文件(40dp x40dp)的确切尺寸时,效果很好,但当我试图将大小设置为较小的值时,图像不会缩放,它们只会被裁剪。
有没有可能在不调整我实际资产的情况下调整我的评级?

最佳答案

我也遇到过同样的问题,因为我希望我的应用程序运行在不同的屏幕分辨率,我希望评级栏根据我的需要自动缩放。
实际上,创建一个自己的类“MyRatingBar”并不难,它完全符合我的需要,它需要的所有输入是:
“checked”星的可提取资源int
“未检查”星的可提取资源int
你想要的星星数
您希望分级栏的宽度为
你希望你的评分条达到的高度

public class MyRatingBar extends RelativeLayout implements OnClickListener {

private int bitmapChecked;
private int bitmapUnChecked;
private byte rating;

public MyRatingBar(Context context, int bitmapChecked, int bitmapUnChecked, int numSelectors, int ratingBarWidth, int ratingBarHeight) {
super(context);
this.bitmapChecked = bitmapChecked;
this.bitmapUnChecked = bitmapUnChecked;

int selectorWidth = ratingBarWidth / numSelectors;
this.rating = -1;

for (byte i = 0; i < numSelectors; i++) {
    ImageView newSelector = new ImageView(context);
    newSelector.setImageResource(bitmapUnChecked);
    this.addView(newSelector);
    newSelector.setLayoutParams(new RelativeLayout.LayoutParams(selectorWidth, ratingBarHeight));
    ((RelativeLayout.LayoutParams) newSelector.getLayoutParams()).setMargins(selectorWidth * i, 0, 0, 0);
    newSelector.setOnClickListener(this);
}
}

public byte getRating() {
    return this.rating;
}

public void setRating(byte rating) {
this.rating = rating;
for (int currentChildIndex = 0; currentChildIndex < this.getChildCount(); currentChildIndex++) {
    ImageView currentChild = (ImageView) this.getChildAt(currentChildIndex);
    if (currentChildIndex < rating) {
        currentChild.setImageResource(this.bitmapChecked);
    }
    else {
        currentChild.setImageResource(this.bitmapUnChecked);
    }
}
}

public void onClick(View clickedView) {
for (byte currentChildIndex = 0; currentChildIndex < this.getChildCount(); currentChildIndex++) {
    if (this.getChildAt(currentChildIndex).equals(clickedView)) {
        this.setRating((byte) (currentChildIndex + 1));
    }
}
}
}

07-27 20:49