Android 4.1.1 bug? Canvas的clipPath实现圆形图片
2014-06-19 13:52
344 查看
发现一个奇怪现象:
SDK Manager里API16的是版本4.1.2 却没有4.1.1的(是因为4.1.1的版本有bug吗?)
GenyMotion模拟器里没有4.1.2版本的,只有4.1.1的。。。
Samsung Galaxy Note 4.1.1 API16里显示不了圆角图片,Eclipse里的布局预览API16 4.1.2里都是正常的。
如上图所示,4.1.1版本的始终变不了圆形的图片。(实际上自己的手机小辣椒Q1也是4.1.1版本的,跟上面一样,变不了圆形图片)。中间那一张图片用的是官方的模拟器,4.1.2版本的(没有4.1.1的)。
代码如下: 图片要放在src属性上(background属性无效)
但是有很明星的锯齿。。。
换成下面一种方法可以实现抗锯齿了,4.1.1版本的也没有问题了, 但是感觉要消耗更多的资源。
SDK Manager里API16的是版本4.1.2 却没有4.1.1的(是因为4.1.1的版本有bug吗?)
GenyMotion模拟器里没有4.1.2版本的,只有4.1.1的。。。
Samsung Galaxy Note 4.1.1 API16里显示不了圆角图片,Eclipse里的布局预览API16 4.1.2里都是正常的。
如上图所示,4.1.1版本的始终变不了圆形的图片。(实际上自己的手机小辣椒Q1也是4.1.1版本的,跟上面一样,变不了圆形图片)。中间那一张图片用的是官方的模拟器,4.1.2版本的(没有4.1.1的)。
代码如下: 图片要放在src属性上(background属性无效)
public class RoundImageView extends ImageView { Path mPath = new Path(); public RoundImageView(Context context) { super(context); } public RoundImageView(Context context, AttributeSet attrs) { super(context, attrs); } public RoundImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onDraw(Canvas canvas) { int width = getMeasuredWidth(); int height = getMeasuredHeight(); <u>mPath.addCircle(width/2, height/2, height/2, Direction.CW); canvas.clipPath(mPath);</u> super.onDraw(canvas); } }
但是有很明星的锯齿。。。
换成下面一种方法可以实现抗锯齿了,4.1.1版本的也没有问题了, 但是感觉要消耗更多的资源。
@Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if(drawable==null || getWidth()==0 || getHeight()==0) { return; } Bitmap b = ((BitmapDrawable)drawable).getBitmap(); canvas.drawBitmap(getRoundedBitmap(b), 0, 0, null); } public static Bitmap getRoundedBitmap(Bitmap bitmap){ Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final Paint paint = new Paint(); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setDither(true); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); canvas.drawARGB(0, 0, 0, 0); canvas.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getHeight()/2, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; }
相关文章推荐
- Android实现圆形的图片边角
- Android 完美实现图片圆角和圆形(对实现进行分析)
- Android 完美实现图片圆角和圆形(对实现进行分析)
- Android 自定义View修炼-Android实现圆形、圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)
- Android BitmapShader实现圆形和圆角图片
- Android 完美实现图片圆角和圆形(对实现进行分析)
- Android实现圆形图片
- Android BitmapShader 实战 实现圆形、圆角图片
- Android 完美实现图片圆角和圆形(对实现进行分析)
- Android BitmapShader实现圆形和圆角图片
- Android 完美实现图片圆角和圆形(对实现进行分析)
- Android 完美实现图片圆角和圆形(对实现进行分析)
- Android自定义View之三角,五角星,圆形,心形图片实现
- Android BitmapShader 实战 实现圆形、圆角图片
- Android开发:canvas.drawTextOnPath()无效----Android4.03的又一个bug!!!!(关于Canvas绘制的方方面面) .
- Android 完美实现图片圆角和圆形(对实现进行分析)
- Android 完美实现图片圆角和圆形(对实现进行分析)
- Android实现图片剪切圆形效果
- Android Xfermode 实战 实现圆形、圆角图片
- Android BitmapShader 实战 实现圆形、圆角图片