手机
当前位置:查字典教程网 >编程开发 >安卓软件开发 >Android中通过反射实现圆角ImageView代码实例
Android中通过反射实现圆角ImageView代码实例
摘要:privatevoidinit(){paint=newPaint(Paint.ANTI_ALIAS_FLAG);roundRect=newR...

private void init(){ paint = new Paint(Paint.ANTI_ALIAS_FLAG); roundRect = new RectF(0, 0, getWidth() , getHeight()); radius = 40; mPorterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN) ; }

继承ImageView,在构造方法中调用,初始化Paint和Xfermode。

protected void onDraw(Canvas canvas) { int sc = canvas.saveLayer(0, 0, getWidth() , getHeight(), null, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG); roundRect.set(0, 0, getWidth(), getHeight()); canvas.drawRoundRect(roundRect, radius, radius, paint); reflectSetXfermod(); super.onDraw(canvas); canvas.restoreToCount(sc); }

重写ImageView的onDraw方法,通过xfermode实现圆角

private void reflectSetXfermod(){ Drawable drawable = getDrawable(); if(drawable == null){ return; } Class bsClass = null; Class[] innerClasses = BitmapDrawable.class.getDeclaredClasses(); for(Class innerClass :innerClasses) { String name = innerClass.getName(); System.out.println("-----innerClass---"+name); if(name.equals("android.graphics.drawable.BitmapDrawable$BitmapState")) { bsClass = innerClass; } } if(bsClass!= null){ try { Field mPaintField = bsClass.getDeclaredField("mPaint"); mPaintField.setAccessible(true); ConstantState constantState = ((BitmapDrawable)drawable).getConstantState(); Paint paint = (Paint)mPaintField.get(constantState); paint.setXfermode(mPorterDuffXfermode); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

通过反射的方法将xfermode设置到BitmapDrawable 里面的内部类BitmapState里的对象mPaint,用来绘制图片。

【Android中通过反射实现圆角ImageView代码实例】相关文章:

基于Android中dp和px之间进行转换的实现代码

Android仿UC底部菜单栏实现原理与代码

android开发之蜂鸣提示音和震动提示的实现原理与参考代码

Android 平台实现Gif 图像解码并播放代码及组件

在Android中动态添加Panel框架的实现代码

android操作SQLite增删改减实现代码

Android应用开发UI控件ImageSwitcher的使用

在Android中 获取正在运行的Service 实例

Android通话记录备份实现代码

android webview 简单浏览器实现代码

精品推荐
分类导航