首先我将贴出几种实现圆角边框的dmeo程序效果图:
方式一:使用shape元素填充背景,设置圆角/带弧度的角
1、首先在 \res\drawable下新建Shape为根元素的资源文件:corners_bg.xml,代码如下:
<?xml version="1.0" enCoding="utf-8"?><shape xmlns:androID="http://schemas.androID.com/apk/res/androID"><!-- 设置填充颜色 为白色 --><solID androID:color="#FFFFFF" /><!-- 设置几何图形四个角的弧度 --><corners androID:radius="10dp"/><!-- 设置几何形状绘制边框 红色边框 --><stroke androID:color="#CD2626"androID:wIDth="2dp"/></shape>
2、在layout布局文件中对需要圆角的控件引用第一步的xml文件作为背景即可。 如图
3、效果显示为 demo程序效果图中的 图一 效果
方式二:使用.9<九妹>带圆角图片设为背景
如图mm_Title_act_btn_normal.9.png 是一张带圆角的图片,只需引用它作为控件[这里是button]背景资源即可。显示效果为 demo程序效果图中的 图二 效果
方式三:重写控件的draw方法[这里我以继承ImageVIEw为例]:重新draw方法,绘制控件的圆角效果
1、CornersImageVIEw.java为自定义的圆角imageview 代码如下:
package com.ice.cornersdemo;import androID.content.Context;import androID.graphics.Bitmap;import androID.graphics.BitmapShader;import androID.graphics.Canvas;import androID.graphics.Matrix;import androID.graphics.Paint;import androID.graphics.RectF;import androID.graphics.Shader;import androID.graphics.drawable.BitmapDrawable;import androID.graphics.drawable.colorDrawable;import androID.graphics.drawable.Drawable;import androID.util.AttributeSet;import androID.Widget.ImageVIEw;/*** 自定义带圆角的ImageVIEw* Created by ice on 14-8-6.*/public class CornersImageVIEw extends ImageVIEw{private Bitmap mBitmap;private BitmapShader mBitmapShader;private final Matrix mShaderMatrix = new Matrix();private final Paint mBitmapPaint = new Paint();private final RectF mDrawableRect = new RectF();private float mDrawableRadius;private int mBitmapWIDth;private int mBitmapHeight;private static final Bitmap.Config BITMAP_CONfig = Bitmap.Config.ARGB_8888;private static final int colorDRAWABLE_DIMENSION = 1;public CornersImageVIEw(Context context){super(context);}public CornersImageVIEw(Context context,AttributeSet attrs){this(context,attrs,0);}public CornersImageVIEw(Context context,AttributeSet attrs,int defStyle){super(context,defStyle);init();}private voID init() {if (mBitmap == null){return;}mBitmapShader = new BitmapShader(mBitmap,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);// 设置抗锯齿mBitmapPaint.setAntiAlias(true);// 使用位图平铺的渲染效果mBitmapPaint.setShader(mBitmapShader);mBitmapWIDth = mBitmap.getWIDth();mBitmapHeight = mBitmap.getHeight();mDrawableRect.set(0,mBitmapWIDth,mBitmapHeight);// 获取图片展示的圆形半径mDrawableRadius = Math.min(mDrawableRect.wIDth()/2,mDrawableRect.height()/2);invalIDate();}@OverrIDepublic voID draw(Canvas canvas){if (getDrawable() == null){return;}canvas.drawCircle(getWIDth()/2,getHeight()/2,mDrawableRadius,mBitmapPaint);}@OverrIDepublic voID setimageBitmap(Bitmap bm) {super.setimageBitmap(bm);mBitmap = bm;init();}@OverrIDepublic voID setimageDrawable(Drawable drawable) {super.setimageDrawable(drawable);mBitmap = getBitmapFromDrawable(drawable);init();}@OverrIDepublic voID setimageResource(int resID) {super.setimageResource(resID);mBitmap = getBitmapFromDrawable(getDrawable());init();}/*** 将Drawable转换成Bitmap对象* @param drawable* @return*/private Bitmap getBitmapFromDrawable(Drawable drawable) {if (drawable == null) {return null;}if (drawable instanceof BitmapDrawable) {return ((BitmapDrawable) drawable).getBitmap();}try {Bitmap bitmap;if (drawable instanceof colorDrawable) {bitmap = Bitmap.createBitmap(colorDRAWABLE_DIMENSION,colorDRAWABLE_DIMENSION,BITMAP_CONfig);} else {bitmap = Bitmap.createBitmap(drawable.getIntrinsicWIDth(),drawable.getIntrinsicHeight(),BITMAP_CONfig);}Canvas canvas = new Canvas(bitmap);drawable.setBounds(0,canvas.getWIDth(),canvas.getHeight());drawable.draw(canvas);return bitmap;} catch (OutOfMemoryError e) {return null;}}}
2、在布局文件中使用自定义控件CornersImageVIEw 如下图:
3、显示效果为 demo程序效果图中的 图三 效果
其他:其实对于实现图片圆形显示前面介绍的重写ImageVIEw的draw方法是在控件本身上做处理,还有一种更简单的方式就是在要显示的图片身上做处理,及对图片本身进行圆形剪切,剪切后显示在控件ImageVIEw上。
图片圆形剪切的方法如下:
/*** 将方形图片剪切成圆图* @param bitmap* @return*/public static Bitmap getCircleBitmap(Bitmap bitmap) {Bitmap output = Bitmap.createBitmap(bitmap.getWIDth(),bitmap.getHeight(),Config.ARGB_8888);Canvas canvas = new Canvas(output);Rect rect = new Rect(0,bitmap.getWIDth(),bitmap.getHeight());RectF rectF = new RectF(rect);Paint paint = new Paint();paint.setAntiAlias(true); // 防止边缘的锯齿paint.setFilterBitmap(true); // 对位图进行滤波处理canvas.drawoval(rectF,paint); // 根据rectF 绘制一个椭圆/圆形// 设置两张图片相交时的显示模式为 SRC_INpaint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));canvas.drawBitmap(bitmap,rect,rectF,paint);return output;}
在代码上 我们只要获取到待显示图片的Bitmap对象,然后调用上面的方法
getCircleBitmap(Bitmap bitmap) 进行圆形剪切后得到新的Bitmap对象,然后调用ImageVIEw的方法 setimageBitma(Bitmapbitmap) 显示在控件上。显示效果为 demo程序效果图中的 图四 效果
[和图三效果一样] 。
以上是内存溢出为你收集整理的Android 圆角边框的实现方式汇总全部内容,希望文章能够帮你解决Android 圆角边框的实现方式汇总所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)