▲ 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MongoDB安装教程「建议收藏」

    MongoDB安装教程「建议收藏」MongoDB安装教程

    2022年4月25日
    51
  • hrbust1224「建议收藏」

    hrbust1224「建议收藏」1.图形输出2.每一个图形的输出都有自己的规律3.不一定要自己一个个printf加for的一行行输出这样会有错4.好比是hrbust1224;这里写代码片include

    2022年5月4日
    44
  • 排名前十的时序数据库[通俗易懂]

    排名前十的时序数据库[通俗易懂]时序数据库全称为时间序列数据库。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。时序数据的兴起还是榜上了物联网的大风。物联网(InternetofThings,简称IOT)是指通过各种信息传感器实时采集任何需要管理设备的信息,并进行管理。物联网的基础数据具有数据量大、结构单一、时间属性强、查询简单等特点,传统的关系型数据库在面对物联网数据时,显得应对发力,基本上属于功能过剩但性能不足。目前最新的DB-Engine上时序数据库排名如下

    2022年10月4日
    0
  • 什么是互质_数组转集合list

    什么是互质_数组转集合list给定 n 个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?输入格式第一行是一个正整数 n。第二行是 n 个不大于10000的正整数。输出格式一个正整数,即最少需要的组数。数据范围1≤n≤10输入样例:614 20 33 117 143 175输出样例:3#include<bits/stdc++.h>using namespace std;const int N = 1e2 + 10;int a[N],g[N][N];int n;int

    2022年8月9日
    5
  • Nginx 报错 504 Gateway Time-out 的解决方法

    Nginx 报错 504 Gateway Time-out 的解决方法

    2022年2月15日
    68
  • Laravel Exceptions——异常与错误处理「建议收藏」

    Laravel Exceptions——异常与错误处理

    2022年2月14日
    43

发表回复

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

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