▲ Android 动画望远镜效果

▲ Android 动画望远镜效果

写字板效果之后,实现望远镜效果,效果如下

在这里插入图片描述

【实现】
新建一张空白的位图,这张位图的大小与控件的大小一样,然后对背景图进行拉伸,画在这张空白的为图上。
在mDx mDy 都不是-1的时候,按下手指或者移动手指。将新建的mBitmapBG作为BitmapShader 设置给Paint,然后在手指所在的位置画圈,并把圈内的图片显示出来。

【代码】

初始化控件

 public TelescopeView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
        mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.timg);

    }

实现 onTouchEvent方法

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                mDx = (int)event.getX();
                mDy = (int)event.getY();
                postInvalidate();
                return  true;

                case MotionEvent.ACTION_MOVE:
                    mDx = (int)event.getX();
                    mDy = (int)event.getY();
                    break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                mDx = -1;
                mDy = -1;
                break;
        }
        postInvalidate();
        return super.onTouchEvent(event);
    }

实现onDraw

   @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (mBitmapBG==null){
            mBitmapBG = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvasbg = new Canvas(mBitmapBG);
            canvasbg.drawBitmap(mBitmap,null,new Rect(0,0,getWidth(),getHeight()),mPaint);
        }
        if (mDx!=-1&&mDy !=-1){
            mPaint.setShader(new BitmapShader(mBitmapBG,Shader.TileMode.REPEAT,Shader.TileMode.REPEAT));
            canvas.drawCircle(mDx,mDy,150,mPaint);
        }

    }

需要注意的一点

之所以在onDraw()方法中创建,mbitmapBG,而不在初始化代码中创建,是因为在初始化时,getWidth(),和getHeigh() 是获取不到值的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/2838.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Tomcat路径下目录的介绍

    Tomcat路径下目录的介绍

  • Java 取余 (remain),取模 (mod) 的 区别和运算

    Java 取余 (remain),取模 (mod) 的 区别和运算Java取余(remain),取模(mod)的区别和运算范围区别:取模主要是用于计算机术语中。取余则更多是数学概念。主要的区别在于对负整数进行除法运算时操作不同那么具体是怎样的不同?首先需要知道Java中如何取模:Java中用符号%对数字进行取模,可以得到以下:System.out.println(5%3);System.out.println(-5%3);Sys…

  • 插值法综合实例用matlab解决,matlab 插值法「建议收藏」

    插值法综合实例用matlab解决,matlab 插值法「建议收藏」matlab插值法实验五插值法5.1实验目的掌握插值的基本思想与方法,会借助数学软件Matlab求解并讨论其收敛性.5.2实验内容1、Lagrange插值法、Newton插值法的Matlab求解方法,在对Runge现象的观察基础上,了解高次插值的不稳定性及其改进方法;2、熟悉Matlab中的插值求解函数,掌握三次样条插值的Matlab求解;3、会求解某些简单的实际问题.5.3实验步骤5.5.1…

  • 计算机dll修复工具,DLL修复工具哪个好?五款修复能力强推荐

    计算机dll修复工具,DLL修复工具哪个好?五款修复能力强推荐为什么会用到dll修复工具呢?因为我们在打开某些程序或者软件的时候会提示找不到某某.dll文件,关键是这些dll文件还不一样,我们去网上下载这些dll文件结果显示跟系统的版本不一致,反正就是各种麻烦,自己去找又费时又费力,而且往往对于有些游戏来说,修补了某一个dll又提示缺少另一个dll文件,这些其实可能都是系统本身太精简或者没有安装一些依赖软件导致的,这时候你完全不需要手动去找这些dll文件,只…

  • [Android] Bitmap的内存计算

    本文聚焦的问题1、Bitmap中像素数据占用多大内存?如何计算?2、不同图片来源对内存大小有什么影响?Bitmap bitmap = Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888);依然以如此声明一个bitmap为例,参数就决定了bitmap的大小。(以Android 8.0+平台为例,这行代码执行后占用的总内存大小=bitmap在…

  • java输出一个数组的元素_Java输出数组元素「建议收藏」

    java输出一个数组的元素_Java输出数组元素「建议收藏」publicclassMainClass{publicstaticvoidprintArray(Integer[]inputArray){for(Integerelement:inputArray){System.out.printf(“%s”,element);System.out.println();}}publicstaticvoidprintArray(D…

    2022年10月11日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号