2

我需要在 Android 中创建一个完全圆形的图像。我有以下代码适用于较新版本的 Android,但在较旧版本(2.3)中,它只是一个黑色圆圈:

    Bitmap avatar = null;
    if (avatarUrl == null || avatarUrl.equals("")) {
        avatar = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_no_avatar);
    } else {
        avatar = HttpClientHelper.downloadImage(avatarUrl); 
    }

    if (avatar == null) {
        // No avatar? Load the default one and use it instead
        avatar = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_no_avatar);
    }

    float width = 50; // avatar.getWidth();
    float height = 50; // avatar.getHeight();
    float ratio = (float)avatar.getWidth() / (float)avatar.getHeight();

    // Scale the avatar to the area that it needs to fit into
    avatar = Bitmap.createScaledBitmap(avatar, (int)(width * ratio), (int)height, true);

    // Turn the avatar into a round image       
    Bitmap circleBitmap = Bitmap.createBitmap((int)width, (int)height, Bitmap.Config.ARGB_8888);        

    BitmapShader shader = new BitmapShader(avatar, TileMode.CLAMP, TileMode.CLAMP);
    Paint paint = new Paint();
    paint.setShader(shader);

    RectF rect = new RectF(0.0f, 0.0f, width, height);          
    Canvas c = new Canvas(circleBitmap);
    c.drawCircle(width / 2, height / 2, (width / 2) - 1, paint);

我应该对 2.3 做些什么来完成这项工作?

4

2 回答 2

0

这一定是2.3的一个bug。我之前将圆形位图设置为导致黑色圆圈的 ImageView 背景。当我将其设置为前景时,问题就消失了。

同样,这只发生在 2.3 中。3.0以后这个问题就不存在了。

于 2013-07-24T22:24:38.200 回答
0

用这个

              float width = 50; // avatar.getWidth();
                  float height = 50; // avatar.getHeight();
                  float radius = 45;
                Bitmap bmpBG = Bitmap.createBitmap(width, height,
                    Bitmap.Config.ARGB_8888);


            Canvas c = new Canvas(bmpBG);

//YOU CAN ADD SHADER FOR EFFECTS

            Paint p = new Paint();
            p.setAntiAlias(true);
            p.setDither(true);

            p.setColor(Color.RED);//SET YOUR COLOR HERE

            c.drawCircle(width/ 2, height/ 2,
                    radius , p);

    //NOW USE bmpBG 
于 2013-05-13T15:20:14.593 回答