项目中遇到的耗时点-(图片缩放里面添加的标记红圈无法缩放)

news2024/11/17 17:45:10

实现效果
在这里插入图片描述

1、需求:显示服务端返回的在线url图片,并且根据标记圈的坐标点和半径绘制到图片上

分析:由于涉及到图片上加标记,可考虑的方案有
1、加个父布局,里面嵌入两个ImageView
2、自定义ImageView、使其支持标图
考虑到熟练性、通用性、扩展性、选择方案二

package com.yyrc.shouTour.widget;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;

public class MyImageView extends androidx.appcompat.widget.AppCompatImageView {

    private final String TAG=MyImageView.class.getCanonicalName();
    Paint paint = new Paint();
     private float x;
    private float y;
    private float r=100;
    public MyImageView(Context context) {
        super(context);
    }

    public MyImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
 
    public void add(float x, float y, float r){//业务层传入坐标值
        shouldRemove=false;
        this.x=x;
        this.y=y;
        this.r=r;
        postInvalidate();//请求重绘,调用onDraw方法、使用Paint画笔,画到canvas上
    }

    public void remove(){
        shouldRemove=true;
        postInvalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
             int radius = (int) r;
            paint.setColor(Color.RED);
            paint.setStrokeWidth(5);
            paint.setStyle(Paint.Style.STROKE);
            canvas.drawCircle(x, y, radius, paint);
    }
}

完成自定义控件后、还需要做一步工作,服务端返回给我的坐标、我们要做等比例调整
也就是我们要根据图片标记点坐标(后台返回)、真实宽高(通过API获取),以及手机屏幕宽高调整坐标点位置

2、需求变更:图片要支持放大拖拽

1、这样原先的自定义ImageView用不了, 在网上搜搜了一个支持拖拽放大的自定义ImageView
[photoView](https://github.com/NEW-MIKE/XPopup/)

为了同时保证拖拽缩放的时候标记的图片也会移动、缩放,这里使用了,重新生成bitmap的方式,把在线url图片和 标记的圈合并成一张新图片

在加载url图片时、重新生成新的bitmpa
 Bitmap newBitmap = Bitmap.createBitmap(1920, 1080, Bitmap.Config.ARGB_8888);//创建bitmap
                                     Canvas canvas = new Canvas(newBitmap);//创建画布
                                     Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 1920, 1080, true);//重新修改bitmap宽高
                                     Log.e(TAG, "resizedBitmap x:" + resizedBitmap.getWidth() + " y:" + resizedBitmap.getHeight() );
                                
                                      canvas.drawBitmap(resizedBitmap, 0, 0, null);//修改宽高bitmap绘制进来
                                     paint.setColor(Color.RED);
                                     paint.setStrokeWidth(5);
                                     paint.setStyle(Paint.Style.STROKE);
                                     canvas.drawCircle(x, y, r, paint);//红色圆圈绘制进来
                                     photoView.setImageBitmap(newBitmap);//显示在控件上

总结

1、出现问题要会分析、要知道怎么查问题
比如为了解决这个问题,我们不是去改框架、而是通过重绘图片去适配框架

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1488669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网站项目】182在线作业管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

docker配置数据默认存储路径graph已过时,新版本中是data-root

错误信息 我在修改/etc/docker/daemon.json文件中,添加存储路径graph字段。然后sudo systemctl restart docker包如下错误:使用journalctl -xeu docker.service错误信息,发现不能匹配graph字段。 原因 我的docker版本: 在doc…

【计算机那些事】

目录 【云计算】 【原神用的是UDP还是TCP】 【几个特殊地址】 【socket是什么】 【内网穿透是什么】 【为什么有HTTP协议,还要有websocket协议】 【科普路由器,集线器,交换机,网桥,光猫】 【USB接口那些事】 …

【Python】进阶学习:pandas--rename()用法详解

【Python】进阶学习:pandas-- rename()用法详解 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的…

ZYNQ PS 读取 TF 卡 BIN 文件中的浮点数

动机 在进行 AI 算法加速器设计时,需要读取模型导出的权重和数据集数据作为加速器的输入,而目前我个人比较常用的做法是将权重和数据集(如果数据集过大,可以选择一两张图片)放到 SD/TF 卡中,然后 PS CPU核去进行数据读取&#xff…

Spring:FactoryBean预加载逻辑以及自定义实现Mybatis的接口扫描

Spring:FactoryBean预加载逻辑以及自定义实现Mybatis的接口扫描 1 前言 参考Mybatis框架的Mapper注解扫描Mapper接口的业务逻辑,其中集成Spring的逻辑里使用到了Spring框架的FactoryBean拓展点,本文针对Spring FactoryBean的加载流程进行分…

嵌入式中C语言结构体的实现

C语言中的数组只能允许程序员定义存储相同类型数据。但是结构是C语言编程中允许您存储不同数据类型的数据。 结构体的定义 要想定义结构,必须用到struct关键字,struct的语句格式: 在struct 中声明了一个含有若干新成员的数据类型。 tag 是结构…

Vision Pro开发者学习路线

官方给到的Vision Pro开发者学习路线: 1. 学习基础知识: - 学习 Xcode、Swift 和 SwiftUI 的基础知识,包括语法、UI 设计等。 - 掌握 ARKit 和 SwiftUI 的使用,了解如何创建沉浸式增强现实体验。 2. 学习 3D 建模&#xf…

CleanMyMac X2024测评深度分析与功能全面介绍

一、软件概述 CleanMyMac X 是一款强大的Mac清理和优化工具,它可以帮助用户轻松管理和释放Mac上的空间,优化系统性能,提高运行速度。这款软件以其直观的用户界面和丰富的功能受到了广大Mac用户的欢迎。 CleanMyMac X4.14.6全新版下载如下: …

Xcode :Could not build module ‘WebKit‘ 已验证解决

问题&#xff1a;Could not build module WebKit 具体报错如下&#xff1a; error: type argument nw_proxy_config_t (aka struct nw_proxy_config *) is neither an Objective-C object nor a block type property (nullable, nonatomic, copy) NSArray<nw_proxy_config_…

Python爬虫副业真的可行吗?

首先回答你&#xff0c;是可行的&#xff0c;python爬虫能当副业&#xff0c;副业的方式比较多&#xff0c;等下我会讲几种。 那学到哪个层次可以接单呢&#xff1f;主要看你是接什么样的单&#xff0c;爬一些资料&#xff0c;视频这种简单的学一两个月就没什么问题&#xff0…

三级分销数据库设计

一&#xff0c;数据结构 二&#xff0c;查询方法 1.mysql递归查询 获取id9的所有上级 r : 9 设置自己所要搜索子节点的id SELECTT2.* FROM(SELECTr AS _id,( SELECT r : pid FROM sj_user WHERE id _id ) AS 2v2,l : l 1 AS lvl FROM( SELECT r : 9 ) vars, -- 查询id为…

力扣61:旋转链表

题目 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2输出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4输出&#xff1a;…

Revit-二开之立面视图创建FilledRegion-(3)

在上一篇博客中介绍了FilledRegion的创建方法,这种方法通常只在平面视图中适用,在三维视图中也是无法创建的(目前研究的是这样的,如果有其他方法,请赐教)。 本片文章介绍一个下在立面视图中创建FilledRegion的方法,主要操作是在立面视图中拾取一个点,然后以该点为原点,…

【单调栈】Leetcode 739.每日温度

【单调栈】Leetcode 739.每日温度 解法&#xff1a;维护单调栈栈中存的是数组的索引 解法&#xff1a;维护单调栈栈中存的是数组的索引 栈中存的是数组的索引 当新的值比当前栈顶的大&#xff0c;那么就执行出栈-更新result数组-判断当新的值比当前栈顶的大&#xff1f;的循环…

【Java设计模式】四、原型设计模式

文章目录 1、原型设计模式2、深克隆和浅克隆 1、原型设计模式 说明&#xff1a; 用一个原型对象&#xff0c;创建和原型对象相同的对象&#xff0c;以能够保证创建对象的性能是创建大量相同对象的最佳方式 使用场景&#xff1a; 对象的创建非常复杂&#xff0c;可以使用原型…

前端学习第六天-css浮动和定位

达标要求 了解浮动的意义 掌握浮动的样式属性 熟练应用清除浮动 熟练掌握定位的三种方式 能够说出网页布局的不同方式的意义 1. 浮动(float) 1.1 CSS 布局的三种机制 网页布局的核心——就是用 CSS 来摆放盒子。CSS 提供了 3 种机制来设置盒子的摆放位置&#xff0c;分…

复现 CVE-2020-9548:Jackson-databind

1、编译Exploit.java Java版本使用的是&#xff1a; Exploit.java代码如下&#xff1a; import java.lang.Runtime;public class Exploit {static {try {Runtime.getRuntime().exec("calc");} catch (Exception e) {e.printStackTrace();}} }对Exploit.java进行编译…

代码随想录训练营第36天 | LeetCode 435. 无重叠区间、​​​​​​LeetCode 763.划分字母区间、LeetCode 56. 合并区间

目录 LeetCode 435. 无重叠区间 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;贪心算法&#xff0c;依然是判断重叠区间 | LeetCode&#xff1a;435.无重叠区间_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 763.划分字母区间 文章讲解&…

[GYCTF2020]EasyThinking --不会编程的崽

看标题就知道&#xff0c;这大概率是关于thinkphp的题目。先尝试错误目录使其报错查看版本号 thinkphp v6.0.0&#xff0c;在网上搜索一下&#xff0c;这个版本有一个任意文件上传漏洞。参考以下文章。 https://blog.csdn.net/god_zzZ/article/details/104275241 先注册一个账…