自定义imageview,实现仿微信的气泡型的图片
来源:互联网 发布:php 开发客户端 编辑:程序博客网 时间:2024/04/30 16:31
package com.padandroid.wechat.widget;import java.lang.ref.WeakReference;import android.annotation.SuppressLint;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;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 com.padandroid.wechat.R;public class ChatImageView extends MyImageView {private Context mContext;private static final Xfermode sXfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_IN);private Bitmap mMaskBitmap;private Paint mPaint;private WeakReference<Bitmap> mSrcWeakBitmap;private int mLastWidth;private int mLastHeight;private int maskRes;public ChatImageView(Context context, AttributeSet attrs) {super(context, attrs);mContext = context;mPaint = new Paint();TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.ChatImageView);maskRes = a.getResourceId(R.styleable.ChatImageView_mask_res, -1);a.recycle();}public void invalidate() {mSrcWeakBitmap = null;if (mMaskBitmap != null) {mMaskBitmap.recycle();}mLastWidth = 0;mLastHeight = 0;super.invalidate();}@SuppressLint("DrawAllocation")@Overrideprotected void onDraw(Canvas canvas) {if (!isInEditMode()) {int width = getWidth();int height = getHeight();int i = canvas.saveLayer(0.0F, 0.0F, width, height, null,Canvas.ALL_SAVE_FLAG);try {Bitmap srcBitmap = mSrcWeakBitmap != null ? mSrcWeakBitmap.get() : null;if (srcBitmap == null || srcBitmap.isRecycled()) {Drawable srcDrawable = getDrawable();if (srcDrawable != null) {srcBitmap = Bitmap.createBitmap(getWidth(),getHeight(), Bitmap.Config.ARGB_8888);Canvas srcBitmapCanvas = new Canvas(srcBitmap);srcDrawable.setBounds(0, 0, getWidth(), getHeight());srcDrawable.draw(srcBitmapCanvas);if (mMaskBitmap == null || mMaskBitmap.isRecycled()|| mLastWidth != width || mLastHeight != height) {mMaskBitmap = getMask(width, height);}drawBitmap(srcBitmapCanvas, mMaskBitmap, mPaint);mSrcWeakBitmap = new WeakReference<Bitmap>(srcBitmap);}}if (srcBitmap != null) {mPaint.setXfermode(null);canvas.drawBitmap(srcBitmap, 0.0F, 0.0F, mPaint);}} catch (Exception e) {System.gc();} finally {canvas.restoreToCount(i);}} else {super.onDraw(canvas);}}public void drawBitmap(Canvas canvas, Bitmap bitmap, Paint paint) {paint.reset();paint.setFilterBitmap(false);paint.setXfermode(sXfermode);canvas.drawBitmap(bitmap, 0, 0, paint);}private Bitmap getMask(int width, int height) {Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setColor(Color.BLACK);Drawable mask = mContext.getResources().getDrawable(maskRes);mask.setBounds(0, 0, width, height);mask.draw(canvas);return bitmap;}}
1 3
- 自定义imageview,实现仿微信的气泡型的图片
- imageview的自定义圆形图片
- 自定义圆形图片ImageView的简单实现效果
- 自定义ImageView实现图片的拖动、缩放和边界回弹
- ImageView实现图片的剪切
- 用两张图片实现类似于聊天气泡等的特殊轮廓图片的效果(已封装可以自定义修改)
- 自定义可缩放图片的ImageView
- 自定义ImageView实现圆形图片
- 自定义ImageView实现圆形图片
- 气泡效果的实现
- Android:通过自定义ImageView实现带边框的ImageView
- 自定义控件:QQ气泡效果粘性控件的实现
- 自定义圆角的ImageView 还可以实现图片的圆形、椭圆形展示。
- 自定义控件实现imageview的点击效果
- 自定义控件实现带进度条的ImageView
- imageview中判断图片的实现
- 放大缩小图片ImageView的实现
- 自定义类继承ImageView 实现多点图片触碰的拖动和缩放
- adb shell获取root权限 因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便
- Windows文件链接命令mklink的使用
- js html 页面倒计时 精确到秒
- 堆损坏异常调试
- Mybatis实现物理分页
- 自定义imageview,实现仿微信的气泡型的图片
- Java基本数据类型——字符型和布尔型
- oracle在declare中根据查询的结果定义游标,游标的select statement部分是动态的。
- Ubuntu启动花屏解决方案
- iOS苹果地图迎来重大改进
- StringBuilder/StringBuffer的insert, append复杂度分析
- android手机与服务器基于UDP协议的通信
- Linux Shell下的输出重定向(0 1 2)
- iOS苹果地图迎来重大改进