Круговое изображение с фоном

android bitmap

2833 просмотра

3 ответа

10835 Репутация автора

Это пришло странно, но я очень запутался в этом. Мне нужно скачать фотографию профиля пользователя, как показано ниже. У меня есть внешний фон как PNG. Но я так растерялся, как я могу достичь этого. Если кто-нибудь знает лучшее и оптимизированное решение, пожалуйста, исправьте его здесь. Мне нужно, чтобы загруженное изображение охватывало только внутреннюю белую часть. введите описание изображения здесь

Автор: ADM Источник Размещён: 18.07.2016 09:12

Ответы (3)


0 плюса

685 Репутация автора

Поделиться с тобой

public class MyCircleImageView extends ImageView {

private  Paint paint;

public MyCircleImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    paint = new Paint();
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.RED);
}

@Override
protected void onDraw(Canvas canvas) {

   Drawable drawable = getDrawable();
    if (drawable != null && drawable instanceof BitmapDrawable)
    {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;

        Bitmap bitmap = bitmapDrawable.getBitmap();
        canvas.saveLayer(0,0,getWidth(),getHeight(),null,0);
        int bitmapWidth = bitmap.getWidth();
        int bitmapHeight = bitmap.getHeight();
        int minR = (bitmapHeight<bitmapWidth?bitmapHeight:bitmapWidth)/2;
        canvas.drawCircle(bitmapWidth/2,bitmapHeight/2,minR,paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

 //            canvas.drawBitmap(bitmap,0,0,paint);
        Rect srcRect = new Rect(0,0,bitmapWidth,bitmapHeight);
        Rect dstRect = new Rect(bitmapWidth/2-minR,0,bitmapWidth/2+minR,bitmapHeight);

        canvas.drawBitmap(bitmap,srcRect,dstRect,paint);

        paint.setXfermode(null);

        canvas.restore();

    }else {
        super.onDraw(canvas);
    }
}
}
Автор: Cgx Размещён: 18.07.2016 09:18

0 плюса

1193 Репутация автора

Здесь вам нужно две вещи круговое изображение + фон (синее изображение).

Если вы хотите получить наилучший результат для всех устройств, установите фон с синим изображением и в соответствии с устройством передайте border_width для Cirlceimageview, чтобы вы могли получить изображение, как показано выше.

<RelativeLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content">
   <de.hdodenhof.circleimageview.CircleImageView
       xmlns:app="http://schemas.android.com/apk/res-auto"
       android:id="@+id/profile_image"
       android:layout_width="wrap_content"
       android:layout_centerInParent="true"
       android:layout_height="wrap_content"
       android:src="@mipmap/profile" //user profile
       android:background="@mipmap/njvkf" //Blue image
       app:civ_border_width="4dp"
       app:civ_border_color="#31A1DA"/>
      </RelativeLayout>

Добавьте класс Cirlceimageview, чтобы увидеть результат из приведенного выше фрагмента кода.

dependencies {
        compile 'de.hdodenhof:circleimageview:2.1.0'
}
Автор: ViramP Размещён: 18.07.2016 10:37

0 плюса

1 Репутация автора

Вы можете использовать: app:civ_fill_color

<de.hdodenhof.circleimageview.CircleImageView
    android:id="@+id/v_image"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_marginEnd="8dp"
    app:civ_fill_color="@color/"
    android:src="@drawable/car" />
Автор: John Nash Размещён: 02.06.2018 08:24
Вопросы из категории :
32x32