0

我尝试为我的应用程序制作一个自定义 RatingBar,它为 4 颗星中的每颗星都有不同的图像。使用以下 onDraw 方法,它在我的手机上运行良好。

public class MyBar extends RatingBar {

    private int[] starArrayColor = { R.drawable.star_1_color, R.drawable.star_2_color, R.drawable.star_3_color, R.drawable.star_4_color };
    private int[] starArrayGrey = { R.drawable.star_1_grey, R.drawable.star_2_grey, R.drawable.star_3_grey, R.drawable.star_4_grey };

    (...)

    @Override
    protected synchronized void onDraw(Canvas canvas) {
        int stars = getNumStars();
        float rating = getRating();
        float x = 10;

        for (int i=0;i<stars;i++) {
            Bitmap bitmap;
            Resources res = getResources();

            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setFilterBitmap(true);
            paint.setDither(true);

            if ((int) rating-1 == i) {
                paint.setAlpha(255);
                bitmap = BitmapFactory.decodeResource(res, starArrayColor[i]);
            } else {
                paint.setAlpha(70);
                bitmap = BitmapFactory.decodeResource(res, starArrayGrey[i]);
            }

            Bitmap scaled = Bitmap.createScaledBitmap(bitmap, 75, 75, true);
            canvas.drawBitmap(scaled, x, 12, paint);
            x += 96;
        }
    }
}

但是图像的 x/y 位置和大小的“计算”成功了!获得正确的坐标只是反复试验......

如何计算位置/大小等以使其在每台设备上正常工作?

在 AbsSeekBar/Progressbar 的来源中,我发现了名为 mPaddingTop、mPaddingBottom 等的变量。有没有办法获得这些值?

4

1 回答 1

0

Bitmap 有一个 getWidth 和 getHeight 函数。您可以使用它们来计算位图的大小。然后,您可以基于此放置它们(使用您希望使用的任何填充)。

于 2013-02-15T19:14:37.043 回答