Android - Нарисуйте границу вокруг ImageView - PullRequest
0 голосов
/ 29 апреля 2019

Я определил imageView, и я хочу сделать два действия: скруглить его края и нарисовать цветную рамку вокруг растрового изображения.Во-первых, у меня все хорошо, а у второго нет.

Вот что я сделал с canvas:

    Bitmap resizedBitmap = Bitmap.createScaledBitmap(bm, 150, 150, false);

    int min = Math.min(resizedBitmap.getWidth(), resizedBitmap.getHeight());

     Bitmap bitmapRounded = Bitmap.createBitmap(min, min, resizedBitmap.getConfig());

                Canvas canvas = new Canvas(bitmapRounded);
                Paint paint = new Paint();
                paint.setAntiAlias(true);
                paint.setShader(new BitmapShader(resizedBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
                canvas.drawRoundRect((new RectF(0.0f, 0.0f, min, min)), min / 2, min / 2, paint);


    avatar.setImageBitmap(bitmapRounded);

    //I tried this, but don't work. 
    avatar.setPadding(1, 1, 1, 1);
    avatar.setBackgroundColor(getResources().getColor(R.color.negro));

Спасибо!

1 Ответ

1 голос
/ 29 апреля 2019

вы можете получить закругленный угол растровой границы, как показано ниже

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int color, int cornerDips, int borderDips, Context context) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final int borderSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) borderDips,
                context.getResources().getDisplayMetrics());
        final int cornerSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) cornerDips,
                context.getResources().getDisplayMetrics());
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);

        // prepare canvas for transfer
        paint.setAntiAlias(true);
        paint.setColor(0xFFFFFFFF);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawARGB(0, 0, 0, 0);
        canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint);

        // draw bitmap
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        // draw border
        paint.setColor(color);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth((float) borderSizePx);
        canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint);

        return output;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...