▲ 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() 是获取不到值的。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 行为识别笔记:improved dense trajectories算法(iDT算法)

    行为识别笔记:improved dense trajectories算法(iDT算法)iDT算法是行为识别领域中非常经典的一种算法,在深度学习应用于该领域前也是效果最好的算法。由INRIA的IEAR实验室于2013年发表于ICCV。目前基于深度学习的行为识别算法效果已经超过了iDT算法,但与iDT的结果做ensemble总还是能获得一些提升。所以这几年好多论文的最优效果都是“Ourmethod+iDT”的形式。此前由于项目原因,对iDT算法进行了很多研究和实验,故此处对其核心思路与

    2022年6月21日
    23
  • 风控模型评价指标总结

    风控模型评价指标总结    下表为我在日常建模过程中,评价模型经常用到的一些指标。现在整理出来分享给大家,如果大家想知道每种指标的具体意义,还请大家查阅相关大佬的博文。小弟就不在这里班门弄斧了。…

    2022年5月27日
    36
  • 基于html的静态网页的设计与制作_html5网页设计实验报告

    基于html的静态网页的设计与制作_html5网页设计实验报告跪CSS布局HTML小编今天和大家分享:网页设计实训个人总结成都航空职业技术学院《网页设计》实训报告专业:计算机网络技术班级:612312学号:123198姓名:刘小慧指导教师:张靓2013年6月《网页设计》实训报告一、实训内容本次实训内容是:制作网站二、实训目的及要CSS布局HTML小编今天和大家分享本次实训目的是:通过对网站的开发与html网页制作代码怎么写网页设计HTML代码教程教程>…

    2025年9月13日
    6
  • Python爬虫框架Scrapy获得定向打击批量招聘信息

    Python爬虫框架Scrapy获得定向打击批量招聘信息

    2022年1月13日
    56
  • 缓冲区溢出攻击实践

    缓冲区溢出攻击实践缓冲区溢出攻击方法是黑客入门的基础,本文以一个具体的实例一步步介绍如何进行最初级的缓冲区溢出攻击。

    2022年7月12日
    10
  • Python将冰冰的第一条vlog并进行数据分析「建议收藏」

    Python将冰冰的第一条vlog并进行数据分析「建议收藏」Python爬取冰冰第一条B站视频的千条评论,绘制词云图,看看大家说了什么吧文章目录数据分析数据预处理数据描述删除空值删除空值可视化点赞TOP20等级分布性别分布绘制词云图数据收集数据分析importpandasaspddata=pd.read_excel(r”bingbing.xlsx”)data.head()用户性别等级评论点赞.

    2022年4月29日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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