【问题标题】:Bitmap with rounded convers带圆角转换的位图
【发布时间】:2018-05-24 19:36:36
【问题描述】:

我想让位图变圆,但在结果位图中我只有 left-top ,而左下角变圆了。 如何让所有的角都变圆?

 @Override
    public Bitmap transform(Bitmap source) {
        Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final int cornerSizePx = 28;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, source.getWidth(), source.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 source
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(source, rect, rect, paint);

        return output;
    }

这是我的源位图:

这是结果位图

但我预计会这样:

【问题讨论】:

标签: android bitmap imageview picasso


【解决方案1】:

制作自定义 ImageView

创建Java 类名CutomImageView。 将以下代码粘贴到该类中。

public class CustomImageView extends ImageView {

public static float radius = 25.0f;

public CustomImageView(Context context) {
    super(context);
}

public CustomImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomImageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void onDraw(Canvas canvas) {
    //float radius = 36.0f;
    Path clipPath = new Path();
    RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
    clipPath.addRoundRect(rect, radius, radius, Path.Direction.CW);
    canvas.clipPath(clipPath);
    super.onDraw(canvas);
}}

在布局中使用这个

    <your package name.CustomImageView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/thumbimg"
                android:layout_marginTop="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"
                android:visibility="gone"
                />

【讨论】:

    【解决方案2】:
    <?xml version="1.0" encoding="utf-8"?>
    

    <item android:state_pressed="true">
        <shape  >
    
            <solid android:color="@color/colorPrimaryDark"/>
            <corners
                android:radius="30dp"/>
        </shape>
    </item>
    
    <item android:state_focused="true" >
        <shape xmlns:android="http://schemas.android.com/apk/res/android" >
            <solid android:color="@color/colorPrimaryDark"/>
            <corners
                android:radius="30dp"/>
        </shape>
    </item>
    
    <item android:state_focused="false" >
        <shape xmlns:android="http://schemas.android.com/apk/res/android" >
            <solid android:color="@color/colorPrimary"/>
            <corners
                android:radius="30dp"/>
        </shape>
    </item>
    
    <item android:state_pressed="false" >
        <shape xmlns:android="http://schemas.android.com/apk/res/android" >
            <solid android:color="@color/colorPrimary"/>
            <corners
                android:radius="30dp"
                />
        </shape>
    </item>
    

    将此代码放入一个新的可绘制文件中,然后使用这个新的可绘制文件作为图像的背景

    【讨论】:

      猜你喜欢
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多