Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中Imageview的圆角_Android_Imageview_Android Linearlayout_Rounded Corners - Fatal编程技术网

android中Imageview的圆角

android中Imageview的圆角,android,imageview,android-linearlayout,rounded-corners,Android,Imageview,Android Linearlayout,Rounded Corners,我在线性布局中有文本视图和图像视图。Textview位于顶部,imageview位于底部。我使用线条下方的圆角进行线性布局。但imageview角点不是圆角。我只看到线性布局的顶角是圆角如何使imageview的底角变圆?(如果删除imageview,我会看到所有底角都变圆) rounded_corners.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.androi

我在线性布局中有文本视图和图像视图。Textview位于顶部,imageview位于底部。我使用线条下方的圆角进行线性布局。但imageview角点不是圆角。我只看到线性布局的顶角是圆角如何使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>

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>

屏幕截图:

你的线性布局是圆角,这是毫无疑问的,但你的图像不是。在屏幕截图中,图像与底部的线性布局重叠。尝试向线性布局添加一些填充(
android:padding=“20dp”
)。这应该是可行的。

要使imageview具有圆角,请将图像转换为位图,然后尝试以下代码:

public static Bitmap roundCorner(Bitmap src, float round) 
{
    // image size
    int width = src.getWidth();
    int height = src.getHeight();

    // create bitmap output
    Bitmap result = Bitmap.createBitmap(width, height, Config.ARGB_8888);

    // set canvas for painting
    Canvas canvas = new Canvas(result);
    canvas.drawARGB(0, 0, 0, 0);

    // config paint
    final Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(Color.BLACK);

    // config rectangle for embedding
    final Rect rect = new Rect(0, 0, width, height);
    final RectF rectF = new RectF(rect);

    // draw rect to canvas
    canvas.drawRoundRect(rectF, round, round, paint);

    // create Xfer mode
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    // draw source image to canvas
    canvas.drawBitmap(src, rect, rect, paint);

    // return final image
     return result;
}

可以使图像的左下角和右下角变圆,如下所示:

代码:


此方法可以为您提供左下角和右下角为圆角的图像。

如果您将圆角形状设置为布局的背景,并且在输出中它不是圆角,则不太可能。你能上传你当前输出的快照吗?看,我已经看过这个例子了。为什么我们不能在xml中实现同样的效果?我错在哪里?@user1670443我认为这不能用xml实现,除非您将图像编辑为圆角。我认为问题是您已将centercrop设置为imageview.Yes。图像与底部的线性布局重叠。我希望我的imageview应该适合线性布局(如我的截图),并且iamge sholud在底部有圆角。如果我使用填充,我会在图像、线性布局之间获得一些间隙。应用填充后,线性布局有圆角??是的。现在我的直线布局有圆角。。但差距是存在的。我使用了android:paddingBottom=“5dp”实际上线性布局仍然是矩形的,背景是圆形的。这是使用xml可以达到的最大值。。。尽管你可以为此应用一些技巧。可以放置另一个圆角与图像视图重叠的视图。试着绕过这些,你就会达到你想要达到的效果。我怎样才能改变它,使顶部的两个角变圆呢?我想出来了,改变这行-->final Rect Rect bottom=new Rect(0,radius,w,h);谢谢你的帮助!我想要左边的圆角…请告诉我如何将clipRect替换为最终的Rect clipRect=新的Rect(半径,0,w,h)@吉世臣:谢谢……它确实起作用了。你能告诉我我是只想要左上角还是左下角吗??
public static Bitmap getRoundCornerBitmap(Bitmap bitmap, int radius) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();
    Bitmap output = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    final RectF rectF = new RectF(0, 0, w, h);

    canvas.drawRoundRect(rectF, radius, radius, paint);

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, null, rectF, paint);

    /**
     * here to define your corners, this is for left bottom and right bottom corners
     */
    final Rect clipRect = new Rect(0, 0, w, h - radius);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
    canvas.drawRect(clipRect, paint);

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, null, rectF, paint);

    bitmap.recycle();

    return output;
}