我有一个锐利边缘的图像.
tile_mode.xml
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/background" android:tileMode="repeat"> </bitmap>
back.xml
<?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/tile_mode" /> <item> <shape> <solid/> <stroke android:width="1dip" android:color="#225786" /> <corners android:radius="10dip"/> <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" /> </shape> </item>
layout.xml
<LinearLayout android:id="@+id/frame1" android:background="@drawable/back" android:layout_width="fill_parent" android:layout_height="wrap_content"> </LinearLayout>
我将图像设置为此布局的背景,并绘制边框,但问题是图像是正方形的,边缘锐利,而我在xml中绘制的边框是圆角.那么如何使图像也有圆角?
解决方法
这是一个解决方案,你必须圆形到你的主要布局背景和内部保持您的图像与您的愿望图像:
如下所示:
back.xml
这将使您的形象圆角
<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <stroke android:width="1dp" android:color="#dd7b7a"/> <corners android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp"/> <solid android:color="#dd7b7a"/> </shape>
tile_mode.xml
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/background" android:tileMode="repeat" />
layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <LinearLayout android:padding="4dip" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/back" android:gravity="center_horizontal" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/tile_mode" /> </LinearLayout> </LinearLayout>
更新
挖了很多东西后,我碰到了已经在stackoverflow上发布的解决方案
Changing Image as Rounded Corner
How to make an ImageView to have rounded corners
步骤1@
main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" tools:context=".MainActivity" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> </RelativeLayout>
第2步@
做一个功能,使用画布四舍五入到你的位图.
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),bitmap .getHeight(),Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0,bitmap.getWidth(),bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0,0); paint.setColor(color); canvas.drawRoundRect(rectF,roundPx,paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap,rect,paint); return output; }
步骤3 @
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView image=(ImageView)findViewById(R.id.image); Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.testing); image.setImageBitmap(getRoundedCornerBitmap(bitmap,20));