Android_图片的处理
来源:互联网 发布:choice数据库 编辑:程序博客网 时间:2024/05/29 04:16
在这次one新版本的UI设计中,其中关于头像的设计中,一部分是圆角头像,一部分是圆形图像,关于这部分的实现有两种方法:第一种就是通过图片的叠加来实现,这种方法相对比较简单,但是如果有多种规格大小的就得提供相应这么多种的图片,第二种就是通过代码实现,这部分实现起来稍微麻烦点,但是如果一旦实现那么代码就可以重用,代码中用起来就比较方便。于是查找了各种资料,今天就来分享下代码实现的方法。
UI的开发最推荐的还是组件式开发,对于多个地方通用的东西抽成一个组件,这样不管是代码复用还是提供给别人使用都是比较方便的做法。在这次UI设计中,有圆形图片,圆角图片,不排除以后还有其他图片,如椭圆图片之类的,所以这次UI组件的开发也采用了继承的方法。
下面就来看下代码实现:
MaskedImage抽象基类
package com.boohee.widgets;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Xfermode;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;public abstract class MaskedImage extends ImageView {private static final Xfermode MASK_XFERMODE;private Bitmap mask;private Paint paint;static {PorterDuff.Mode localMode = PorterDuff.Mode.DST_IN;MASK_XFERMODE = new PorterDuffXfermode(localMode);}public MaskedImage(Context paramContext) {super(paramContext);}public MaskedImage(Context paramContext, AttributeSet paramAttributeSet) {super(paramContext, paramAttributeSet);}public MaskedImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {super(paramContext, paramAttributeSet, paramInt);}public abstract Bitmap createMask();protected void onDraw(Canvas paramCanvas) {Drawable localDrawable = getDrawable();if (localDrawable == null)return;try {if (this.paint == null) {Paint localPaint1 = new Paint();this.paint = localPaint1;this.paint.setFilterBitmap(false);Paint localPaint2 = this.paint;Xfermode localXfermode1 = MASK_XFERMODE;Xfermode localXfermode2 = localPaint2.setXfermode(localXfermode1);}float f1 = getWidth();float f2 = getHeight();int i = paramCanvas.saveLayer(0.0F, 0.0F, f1, f2, null, 31);int j = getWidth();int k = getHeight();localDrawable.setBounds(0, 0, j, k);localDrawable.draw(paramCanvas);if ((this.mask == null) || (this.mask.isRecycled())) {Bitmap localBitmap1 = createMask();this.mask = localBitmap1;}Bitmap localBitmap2 = this.mask;Paint localPaint3 = this.paint;paramCanvas.drawBitmap(localBitmap2, 0.0F, 0.0F, localPaint3);paramCanvas.restoreToCount(i);return;} catch (Exception localException) {StringBuilder localStringBuilder = new StringBuilder().append("Attempting to draw with recycled bitmap. View ID = ");System.out.println("localStringBuilder=="+localStringBuilder);}}}
CircularImage(圆形图片)实现类
public class CircularImage extends MaskedImage {public CircularImage(Context paramContext) {super(paramContext);}public CircularImage(Context paramContext, AttributeSet paramAttributeSet) {super(paramContext, paramAttributeSet);}public CircularImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {super(paramContext, paramAttributeSet, paramInt);}public Bitmap createMask() {int i = getWidth();int j = getHeight();Bitmap.Config localConfig = Bitmap.Config.ARGB_8888;Bitmap localBitmap = Bitmap.createBitmap(i, j, localConfig);Canvas localCanvas = new Canvas(localBitmap);Paint localPaint = new Paint(1);localPaint.setColor(-16777216);float f1 = getWidth();float f2 = getHeight();RectF localRectF = new RectF(0.0F, 0.0F, f1, f2);localCanvas.drawOval(localRectF, localPaint);return localBitmap;}}
RoundedCornersImage(圆角图片)实现类
public class RoundedCornersImage extends MaskedImage {private static final int DEFAULT_CORNER_RADIUS = 8;private int cornerRadius = DEFAULT_CORNER_RADIUS;public RoundedCornersImage(Context paramContext) {super(paramContext);}public RoundedCornersImage(Context paramContext, AttributeSet paramAttributeSet) {super(paramContext, paramAttributeSet);int[] arrayOfInt = R.styleable.RoundedCornersImage;TypedArray a = paramContext.obtainStyledAttributes(paramAttributeSet, arrayOfInt);int i = a.getDimensionPixelSize(0, DEFAULT_CORNER_RADIUS);this.cornerRadius = i;a.recycle();}public Bitmap createMask() {int i = getWidth();int j = getHeight();Bitmap.Config localConfig = Bitmap.Config.ARGB_8888;Bitmap localBitmap = Bitmap.createBitmap(i, j, localConfig);Canvas localCanvas = new Canvas(localBitmap);Paint localPaint = new Paint(1);localPaint.setColor(-16777216);float f1 = getWidth();float f2 = getHeight();RectF localRectF = new RectF(0.0F, 0.0F, f1, f2);float f3 = this.cornerRadius;float f4 = this.cornerRadius;localCanvas.drawRoundRect(localRectF, f3, f4, localPaint);return localBitmap;}}
如果以后新增了椭圆图片,那么只须新建一个椭圆图片累继承自MaskedImage,然后重写createMask()方法即可。
至此,代码实现已完成,只需要在xml中像使用android自带组件的方式使用我们的自定义组件即可,如:
<com.boohee.widgets.RoundedCornersImage android:id="@+id/rounded_image" android:layout_width="60dp" android:layout_height="60dp" />
0 0
- Android_图片的处理
- android_基础_图片处理-Bitmap的使用
- Android_图片处理_高效Bitmap
- Android_图片的三级缓存
- android_基础_图片处理_createBitmap的6个重载方法
- android_基础_图片处理_bitmap、canvas的学习和使用
- android_动态设置drawableLeft图片的大小
- 【android_温故知新】android 的事件处理
- android_基础_图片处理_在imageview上画图
- Android_绘制圆形图片
- Android_图片截取放大
- Android_手势 滑动图片
- Android_优化查询加载大数量的本地相册图片
- Android_优化查询加载大数量的本地相册图片
- Android_程序未处理异常的捕获与处理
- Android_程序未处理异常的捕获与处理
- android_分享 图片 和 文字
- android_画图_图片剪切
- 从抢购iPhone 6看苹果的产业与营销
- 排序算法——归并排序
- c# 全排列算法
- 传智播客hadoop7天视频教程
- 海尔施特劳斯智能净水机U3京东首发,1999元特惠即将开抢喽!
- Android_图片的处理
- 两个栈实现一个队列和两个队列实现一个栈【算法导论课后题】
- UIViewController生命周期控制
- poj3237 树链剖分
- commons-beanutils使用
- WordCount运行原理结合代码详细分析
- centos6.4 inotify+rsync实现文件同步设置
- Python语言中的正则表达式学习
- 使用AFNetworking的注意事项