美文网首页Android自定义ViewAndroid 自定义view
Android 自定义view---图片放大镜

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

作者: Android苏大强 | 来源:发表于2018-02-07 18:25 被阅读39次

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

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

    相关文章

      网友评论

        本文标题:Android 自定义view---图片放大镜

        本文链接:https://www.haomeiwen.com/subject/tvsazxtx.html