Android 自定义view---图片放大镜

《Android 自定义view---图片放大镜》

原本想用北极星小姐姐镇楼  谁知道压缩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;

}

这样一个方形的放大效果就可以出现了

《Android 自定义view---图片放大镜》

思考一下 放大镜没有方形的吧  怎样把方形的转换成圆形的呢 

思路 有2种  第一种是把bitmap转换成圆形

                   第二种是调用android 的Xfermode

想了想还是研究下xfermode吧

网上查了下资料 。我操   一脸懵逼 居然有2种答案

《Android 自定义view---图片放大镜》
《Android 自定义view---图片放大镜》

1种mode 居然出现了2种效果  随后看了下源码

《Android 自定义view---图片放大镜》

一个枚举 一共16种描述  什么源遮盖物 目标物啊 看的一脸懵逼

可能是语文学的不好吧  于是自己试试吧 测试下16种效果 然后举例来吧

src:

《Android 自定义view---图片放大镜》

srcin

《Android 自定义view---图片放大镜》

经反复测试 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);

}

最后上一张稍微清除的放大镜效果动图太花了

《Android 自定义view---图片放大镜》

参考文献    提供下参考文献

GitHub 地址      this is 传送门

 由于地址demo较多 如有需要请单独下载MagnifyingGlassView

优化   如果做是做高清放大图 不要去view转bitmap 要git源资源文件根据手势在view上的比例

取出在高清原图上的具体位置然后再去截图图片。

    原文作者:jack_Lijd
    原文地址: https://www.jianshu.com/p/a5d317721d99
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞