原本想用北极星小姐姐镇楼 谁知道压缩gif的时候画质只能选普请 因为简书限制5m 都压成鬼了
话不多说 思路自定义view设置背景 setBackgroundResource(R.drawable.timi);
然后把view转换成图片
public BitmapconvertViewToBitmap() {
Bitmap bitmap= Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas =new Canvas(bitmap);
draw(canvas);
return bitmap;
}
然后调用放大效果 添加到canves上 这里的效果是放大一倍
mSrcRect =new Rect(x -100, y -100, x +100, y +100);
mDestRect =new Rect(x -200, y -200, x +200, y +200);
canvas.drawBitmap(bm, mSrcRect,mDestRect, mBitPaint);
然后添加收拾监听 根据手势效果重绘canves
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (bm ==null) {
//合理的位置
bm = convertViewToBitmap();
}
x = (int) event.getX();
y = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
x = (int) event.getX();
y = (int) event.getY();
break;
case MotionEvent.ACTION_UP:
isTouch =true;
break;
}
invalidate();
return true;
}
这样一个方形的放大效果就可以出现了
思考一下 放大镜没有方形的吧 怎样把方形的转换成圆形的呢
思路 有2种 第一种是把bitmap转换成圆形
第二种是调用android 的Xfermode
想了想还是研究下xfermode吧
网上查了下资料 。我操 一脸懵逼 居然有2种答案
1种mode 居然出现了2种效果 随后看了下源码
一个枚举 一共16种描述 什么源遮盖物 目标物啊 看的一脸懵逼
可能是语文学的不好吧 于是自己试试吧 测试下16种效果 然后举例来吧
src:
srcin
经反复测试 16种复合第二个文章效果
顺便上下ondraw
@Override
protected void onDraw(Canvas canvas) {
mSrcRect =new Rect(x -100, y -100, x +100, y +100);
mDestRect =new Rect(x -200, y -200, x +200, y +200);
mDestRect1 =new Rect(x -300, y -300, x +100, y +100);
if (isTouch ==true) {
//清屏功能 投机取巧
mDestRect =new Rect(x -100, y -100, x +100, y +100);
canvas.drawBitmap(bm, mSrcRect, mDestRect, mBitPaint);
isTouch =false;
}else {
if (bm !=null) {
int layerId = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
canvas.drawOval(new RectF(mDestRect), mBitPaint);
mBitPaint.setXfermode(new PorterDuffXfermode(mode));
canvas.drawBitmap(bm, mSrcRect,mDestRect, mBitPaint);
mBitPaint.setXfermode(null);
canvas.restoreToCount(layerId);
}
}
super.onDraw(canvas);
}
最后上一张稍微清除的放大镜效果动图太花了
参考文献 提供下参考文献
GitHub 地址 this is 传送门
由于地址demo较多 如有需要请单独下载MagnifyingGlassView
优化 如果做是做高清放大图 不要去view转bitmap 要git源资源文件根据手势在view上的比例
取出在高清原图上的具体位置然后再去截图图片。