我有一个ImageView子类,我用它来绘制带圆角的图像.代码基于这个答案,如下:
public class ImageViewRoundedCorners extends ImageView {
...
@Override
protected void onDraw(Canvas canvas) {
Bitmap scaledBitmap = Bitmap.createBitmap(getMeasuredWidth(),
getMeasuredHeight(),
Bitmap.Config.ARGB_8888);
Canvas scaledCanvas = new Canvas(scaledBitmap);
super.onDraw(scaledCanvas);
drawRoundedCornerBitmap(canvas, scaledBitmap,
getMeasuredWidth(), getMeasuredHeight());
scaledBitmap.recycle();
}
protected void drawRoundedCornerBitmap(Canvas outputCanvas, Bitmap input, int w, int h) {
Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
mPaint.reset();
mPaint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
mPaint.setStyle(Paint.Style.FILL);
canvas.drawPath(mClipPath, mPaint);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(input, 0, 0, mPaint);
outputCanvas.drawBitmap(output, 0, 0, null);
}
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,可以使用正确的圆角绘制图像.为了避免前两行的分配 …
我已经看到了如何创建一个可绘制这是圆了一个位图,以及如何添加一个大纲(AKA中风)周围,这里.
我无法找到如何在不绘制新位图的情况下仅对位图的某些角进行舍入,而不是创建新的位图,并且仍然可以用于中心裁剪ImageView.
这是我发现的,但它确实创建了一个新的位图,并且在带有center-crop的imageView中使用它时(源于此处):
/**
* Create rounded corner bitmap from original bitmap.
*
* @param input Original bitmap.
* @param cornerRadius Corner radius in pixel.
* @param squareTL,squareTR,squareBL,squareBR where to use square corners instead of rounded ones.
*/
public static Bitmap getRoundedCornerBitmap(final Bitmap input, final float cornerRadius, final int w, final int h,
final boolean squareTL, final boolean squareTR, final boolean squareBL, final boolean squareBR) {
final Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888); …Run Code Online (Sandbox Code Playgroud) 我使用Glide。以下代码段:
Glide.with(context).load(referenceUrl).into(holder.imageViewPhoto);
Run Code Online (Sandbox Code Playgroud)
好。很好 但是我需要仅在TOP上显示带有圆角的图像。
像这样:
Glide有可能吗?
我在linearlayout中有一个textview和imageview.Textview位于顶部,imageview位于底部.我使用下面的线条为linearlayout设置了圆角.但是imageview角落并没有四舍五入.我看到只有linearlayout的顶角是圆形的.我如何才能获得imageview的圆角?(如果删除imageview,我看到所有的角都是圆角的)
rounded_corners.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ffffff" />
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
main.xml中
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="50dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="50dp"
android:background="@xml/rounded_corners"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="xxxxxxxx" />
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/my_image_view" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
屏幕截图:

我目前正在使用此代码:
@Override
public Bitmap transform(Bitmap source) {
Bitmap result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(result);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, source.getWidth(),source.getHeight());
final RectF rectF = new RectF(rect);
final float scale = context.getResources().getDisplayMetrics().density;
final float roundDp = 10 * scale;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundDp, roundDp, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(source, rect, rect, paint);
source.recycle();
return result;
}
Run Code Online (Sandbox Code Playgroud)
但问题是这种方法只允许我一次修改所有4个角.我怎么只绕图像的底角?
有人知道如何制作这样的东西吗?
我试过在这里找到Android的解决方案如何在具有imageview和文本视图的圆形中创建这样的视图
试图玩de.hdodenhof.circleimageview.CircleImageView,但仍然无法找到任何解决方案.
我正在开发一个Xamarin Android应用程序,我需要制作一个循环ImageView.
怎么能实现这一目标?
通过制作自定义ImageView并使用以下方法覆盖onDraw方法将使ImageView具有圆角.参考
@Override
protected void onDraw(Canvas canvas) {
float radius = getContext().getResources().getDimension(R.dimen.round_corner_radius);
Path path = new Path();
RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
path.addRoundRect(rect, radius, radius, Path.Direction.CW);
canvas.clipPath(path);
super.onDraw(canvas);
}
Run Code Online (Sandbox Code Playgroud)
如何选择性地制作圆角而不是将所有四个角都圆.例如,仅使左上角和右上角成圆形并保持底角完好无损.这是一个通过Bitmap做的解决方案.我正在寻找这个onDraw方法,只使用Path和RectF.
我希望完成一些看起来像这里底部的操作(对于所有四个角,但是我只显示图像的底部):
到目前为止,我有:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/orange_tile"
android:tileMode="repeat"
android:dither="true"
android:gravity="center" />
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<stroke android:color="@color/white" android:width="0.5dp" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
然而,这给了我一个tiiiny在每个角落像素,按预览:
那么,我该如何抓住那些角落?可见的笔触不是它,不是实际需要的...
尝试过的事情:
将固体添加到项目中可以得到与我想要的完全相反的效果。可能有掩盖技巧...
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/orange_tile"
android:tileMode="repeat"
android:dither="true"
android:gravity="center" />
</item>
<item>
<shape android:shape="rectangle">
<color android:color="@color/white" />
<corners android:radius="2dp"/>
<stroke android:color="@color/white" android:width="0.5dp" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
磁贴: