Android 图片截取人物头像(仿逗拍)
来源:互联网 发布:ogg 中同步表数据变动 编辑:程序博客网 时间:2024/05/03 09:31
要求
根据给定的头部模板,截取资源图。背景图可支持拖动,缩放,拖动旋转
分析
定义剪切浮层,实现背景资源图的操作view
实现
- 绘制剪切浮层
/** * 初始化绘制笔 */ private void initRectPaint() { mFloatPaint = new Paint(); mFloatPaint.setAlpha(mAlpha); mFloatPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR)); mEdgePaint = new Paint(); mEdgePaint.setColor(Color.parseColor("#ff000000")); mEdgePaint.setAlpha(mAlpha); }@Override public void draw(Canvas canvas) { /** 绘制周围的背景色 **/ drawEdge(canvas); /** 绘制中间浮层 **/ canvas.drawBitmap(mCropDrawable, mFloatRect.left, mFloatRect.top, mFloatPaint); }
- 操作图层手势
@Override protected void onDraw(Canvas canvas) { canvas.save(); canvas.drawColor(Color.parseColor("#ff1c1c22")); canvas.drawBitmap(mBGHeadBitmap, mFloatRect.left, mFloatRect.top, null); canvas.drawBitmap(mBGBitmap, mBGgmatrix, null); mFloatView.draw(canvas); canvas.restore(); }//手势操作public boolean onTouchEvent(MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN : eventMode = EventMode.DRAG; x_down = event.getX(); y_down = event.getY(); savedMatrix.set(mBGgmatrix); break; case MotionEvent.ACTION_POINTER_DOWN : eventMode = EventMode.ZOOM; oldDist = spacing(event); mRotation = rotation(event); savedMatrix.set(mBGgmatrix); midPoint(midPoint, event); break; case MotionEvent.ACTION_MOVE : if (eventMode == EventMode.DRAG) { matrix1.set(savedMatrix); matrix1.postTranslate(event.getX() - x_down, event.getY() - y_down); mBGgmatrix.set(matrix1); invalidate(); } else if (eventMode == EventMode.ZOOM) { float rotation = rotation(event) - mRotation; float newDist = spacing(event); float scale = newDist / oldDist; /** 缩放 **/ float values[] = new float[9]; { matrix1.set(savedMatrix); matrix1.postScale(scale, scale, midPoint.x, midPoint.y); } /** 旋转 **/ matrix1.postRotate(rotation, midPoint.x, midPoint.y); mBGgmatrix.set(matrix1); invalidate(); } break; case MotionEvent.ACTION_UP : case MotionEvent.ACTION_POINTER_UP : eventMode = EventMode.NONE; break; } return true; }
- 获取剪切图片
Bitmap tmpBitmap = Bitmap.createBitmap(mScrrenWidth, mScrrenHeight, Config.ARGB_8888); // 背景图片 Canvas canvas = new Canvas(tmpBitmap); // 新建画布 canvas.drawBitmap(mBGHeadBitmap, mFloatRect.left, mFloatRect.top, null); canvas.drawBitmap(mBGBitmap, mBGgmatrix, null); // 画图片 canvas.save(Canvas.ALL_SAVE_FLAG); // 保存画布 canvas.restore(); Bitmap ret = Bitmap.createBitmap(tmpBitmap, mFloatRect.left, mFloatRect.top, mFloatRect.width(), mFloatRect.height(), null, true); tmpBitmap.recycle(); tmpBitmap = null; Bitmap newRet = Bitmap.createBitmap(mFloatRect.width(), mFloatRect.height(), Config.ARGB_8888); Canvas canvasHead = new Canvas(newRet); canvasHead.drawBitmap(ret, 0, 0, null); Paint paintHead = new Paint(); paintHead.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); Bitmap crop = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.headmask); canvasHead.drawBitmap(crop, 0, 0, paintHead); return newRet;
效果
***基本上我不提供源代码,但是我会尽量用文字把对应的算法描述清楚****因为靠自己的努力和实践写出来的效果才真正是自己的东西如果想要源码Demo,请联系我
0 0
- Android 图片截取人物头像(仿逗拍)
- Android:设置圆形头像,Android截取圆形图片
- android用户头像截取
- android用户头像截取
- Android个人中心的头像上传,图片编码及截取
- 截取圆形图片做头像
- 截取图片生成头像插件
- Android 圆形头像的截取
- android 头像截取(方形、椭圆、不规则头像截取)
- <<爬坑一>>有关上传头像中的截取图片
- 《Android开发卷——设置圆形头像,Android截取圆形图片》
- android圆形头像、图片
- Android:高仿QQ头像截取
- js 头像上传(图片截取) 插件 全屏高清版 源码
- android截取图片
- Android图片截取
- Android BitmapRegionDecoder截取图片
- android之图片截取
- 旱冰场造价
- C++虚函数实现机制
- 【spring教程之十】spring注自动检测标注bean
- 图论之欧拉回路
- linux的find命令
- Android 图片截取人物头像(仿逗拍)
- 二叉树相关题目
- 蓝桥杯---分酒
- chrome 谷歌浏览器命令行大全 (List of Chromium Command Line Switches)
- UVALive - 4490 Help Bubu 四维DP + 滚动数组
- 黑马程序员——Java IO流(一)
- MyDream
- Java多线程:Producer-Consumer不同的几种实现方式
- 马云:新型企业想要保持创新力 规模要在60人以内