Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"tools:context=".MainActivity"><com.myapp.MyViewandroid:id="@+id/mv"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/darker_gray" />
</RelativeLayout>
import android.content.Context
import android.graphics.BitmapFactory
import android.graphics.BitmapShader
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Path
import android.graphics.Shader
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.appcompat.widget.AppCompatImageViewclass MyView : AppCompatImageView {private var mPaint: Paint = Paint()private var mLinePaint: Paint = Paint()private var mPath: Path = Path()private var mPreX = 0fprivate var mPreY = 0fprivate var mRadius = 400fprivate var mBitmapShader: BitmapShader? = nullprivate val mResId = R.mipmap.pconstructor(ctx: Context, attributeSet: AttributeSet) : super(ctx, attributeSet) {//mPaint.style = Paint.Style.STROKE//mPaint.strokeWidth = 20fmLinePaint.style = Paint.Style.STROKEmLinePaint.strokeWidth = 5fmLinePaint.color = Color.REDval bmp = BitmapFactory.decodeResource(resources, mResId, null)mBitmapShader = BitmapShader(bmp, Shader.TileMode.CLAMP, Shader.TileMode.REPEAT)mPaint.setShader(mBitmapShader)}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)canvas.drawCircle(mPreX, mPreY, mRadius, mPaint)val pts = floatArrayOf(mPreX, mPreY - 50, mPreX, mPreY + 50, mPreX - 50, mPreY, mPreX + 50, mPreY)canvas.drawLines(pts, mLinePaint) //十字交叉线。}override fun onTouchEvent(event: MotionEvent): Boolean {when (event.action) {MotionEvent.ACTION_DOWN -> {mPath.moveTo(event.x, event.y)mPreX = event.xmPreY = event.yreturn true}MotionEvent.ACTION_MOVE -> {val endX = (mPreX + event.x) / 2val endY = (mPreY + event.y) / 2mPath.quadTo(mPreX, mPreY, endX, endY)mPreX = event.xmPreY = event.y}MotionEvent.ACTION_UP -> {}}postInvalidate()return super.onTouchEvent(event)}
}
当手指在屏幕上滑动时候,动态的以十字交叉线中心点为中心框选绘制圆:

下方开始repeat绘图,是因为BitmapShader的Y设置为REPEAT。
Android BitmapShader更简易的实现刮刮乐功能,Kotlin-CSDN博客文章浏览阅读312次,点赞6次,收藏12次。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android Bitmap保存成至手机图片文件,Kotlin_android bitmap保存图片-CSDN博客。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。https://blog.csdn.net/zhangphil/article/details/145143789Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin_matrix drawbitmap android-CSDN博客文章浏览阅读1.1k次,点赞25次,收藏21次。需要注意的,因为在xml布局里面特别设置了ImageView的高度为wrap_content,手指在屏幕触点的位置是放大镜里面放大图片后准确圆心位置,但是,如果ImageView设置成match_parent,则因为ImageView里面的Bitmap被缩放(此处Bitmap其实小于ImageView,被拉伸了),拉伸后的Bitmap水平方向坐标与ImageView一直重合,但竖直方向,Bitmap坐标与ImageView不一致,会造成一种现象,手指触点放大镜放大后,水平方向是正确的,但竖直方向有偏移量。_matrix drawbitmap android
https://zhangphil.blog.csdn.net/article/details/135374279Android BitmapShader setLocalMatrix缩放Bitmap高度重新onMeasure,Kotlin_android setlocalmatrix-CSDN博客文章浏览阅读1.3k次,点赞22次,收藏17次。Android横竖屏切换View设置不同尺寸或等比例缩放的自定义View的onMeasure解决方案(2)附录文章1以xml布局文件方式实现了一个view在横竖屏切换时候的大小尺寸缩放,实现这种需求,也可以使用自定义View的onMeasure方法实现。遗留问题,手指在上图滑动过程中,当滑动到一定区域,下面的切图框中已无太有效的图可以“放大”,后续可以填充黑色,表示无效放大。所有的绘制轨迹线,都限定在了绿色的圆角矩形框中,超出区域不予绘制。基础上,限定下面切图的绘制区域,超出绿色区域的轨迹线不再绘制。_android setlocalmatrix
https://blog.csdn.net/zhangphil/article/details/135982934Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(2)_paint设置bitmap-CSDN博客文章浏览阅读788次,点赞11次,收藏8次。【代码】Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(2)_paint设置bitmap
https://blog.csdn.net/zhangphil/article/details/135508123
相关文章:
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…...
linux通过web向mac远程传输字符串,mac收到后在终端中直接打印。
要通过Web从Linux向Mac远程传输字符串,并在Mac的终端中直接打印,可以使用以下方法。这里假设Linux作为服务器,Mac作为客户端。 方法 1:使用Python的HTTP服务器 在Linux上启动一个简单的HTTP服务器,Mac通过curl获取字符…...
海云安开发者安全智能助手D10荣膺 “ AI标杆产品 ” 称号,首席科学家齐大伟博士入选2024年度 “ 十大杰出青年 ”
2024年12月27日,粤港澳大湾区AI领袖峰会在深圳成功举办,大会表彰了在人工智能技术创新、应用实践和产业发展等方面取得优异成绩的企业和个人,深圳海云安网络安全技术有限公司开发者安全智能助手D10荣膺“AI标杆产品”称号。同时,公…...
Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)
目录 引言 Apache POI操作Excel的实用技巧 1.合并单元格操作 2.设置单元格样式 1. 创建样式对象 2. 设置边框 3. 设置底色 4. 设置对齐方式 5. 设置字体样式 6.设置自动换行 7. 应用样式到单元格 3. 定位和操作指定单元格 4.实现标签-值的形式 5.列宽设置 1. 设…...
ReactiveSwift 简单使用
记录 ReactiveSwift 简单使用 导入 ReactiveSwift 库创建 TestViewModel 文件 enum JKTypeType: Int {case cloudcase devicecase weater }// 通过监听属性变化 class TestViewModel: NSObject {lazy var recordType: Property<JKTypeType> {return Property(recordTy…...
CSS 的基础知识及应用
前言 CSS(层叠样式表)是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现,使页面不仅实现功能,还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…...
【Web】2025西湖论剑·中国杭州网络安全安全技能大赛题解(全)
目录 Rank-l Rank-U sqli or not Rank-l username存在报错回显,发现可以打SSTI 本地起一个服务,折半查找fuzz黑名单,不断扔给fenjing去迭代改payload from flask import Flask, request, render_template_stringapp Flask(__name__)app…...
能源物联网数据采集设备 串口服务器功能参数介绍
摘要 随着物联网技术的快速发展,各种传统设备的联网需求愈发迫切。串口服务器作为一种桥接传统串口设备与现代网络的关键设备,在工业控制、智能电网、交通运输等域发挥了重要作用。本文以APort100串口服务器为例,探讨串口服务器在现代物联…...
在线json格式化工具
在线json格式化工具,包括中文和英文版本,无需登录,无需费用,用完就走。 官网地址: https://json.openai2025.com 效果如下:...
OSPF的LSA的学习研究
OSPF常见1、2、3、4、5、7类LSA的研究 1、拓扑如图,按照地址表配置,激活OSPF划分相关区域并宣告相关网段 2、1类LSA,每台运行了OSPF的路由器都会产生,描述了路由器的直连接口状况和cost 可以看到R1产生了一条router lsa࿰…...
1166 Summit (25)
A summit (峰会) is a meeting of heads of state or government. Arranging the rest areas for the summit is not a simple job. The ideal arrangement of one area is to invite those heads so that everyone is a direct friend of everyone. Now given a set of tenta…...
AUTOSAR从入门到精通-【自动驾驶】高精地图(四)
目录 前言 现状概述 算法原理 高精地图的构成 A.基础地图层 B.几何地图层 C.语义地图层 D.道路连接层 E.先验地图层 F.实时地图数据 高精地图的构建及维护 移动建图系统 高精地图维护 A.地图变换检测 B.地图数据更新 3. 众包建图 3.1 众包建图的优劣势 3.2 众包起源:M…...
MySQL8数据库全攻略:版本特性、下载、安装、卸载与管理工具详解
大家好,我是袁庭新。 MySQL作为企业项目中的主流数据库,其5.x和8.x版本尤为常用。本文将详细介绍MySQL 8.x的特性、下载、安装、服务管理、卸载及管理工具,旨在帮助用户更好地掌握和使用MySQL数据库。 1.MySQL版本及下载 企业项目中使用的…...
网络安全---CMS指纹信息实战
CMS简介 CMS(Content Management System)指的是内容管理系统,如WordPress、Joomla等。CMS系统非常常见,几乎所有大型网站都使用CMS来管理其网站的内容。由于常见CMS的漏洞较多,因此黑客将不断尝试利用这些漏洞攻击CMS…...
基于C#实现对象序列化的3种方案
大家好!我是付工。 在上位机开发过程中,我们可能经常要实现一个数据对象的持久化,将对象保存到具体的文件中,今天给大家介绍常用的3种方案,大家根据实际情况,选择适合的方案。 一、准备工作 在介绍这4种…...
蓝桥杯真题 - 公因数匹配 - 题解
题目链接:https://www.lanqiao.cn/problems/3525/learning/ 个人评价:难度 2 星(满星:5) 前置知识:调和级数 整体思路 题目描述不严谨,没说在无解的情况下要输出什么(比如 n n n …...
使用 Java 实现基于 DFA 算法的敏感词检测
使用 Java 实现基于 DFA 算法的敏感词检测 1. 引言 敏感词检测在内容审核、信息过滤等领域有着广泛的应用。本文将介绍如何使用 DFA(Deterministic Finite Automaton,确定有限状态自动机) 算法,在 Java 中实现高效的敏感词检测。…...
Jenkins-Pipeline简述
一. 什么是Jenkins pipeline: pipeline在jenkins中是一套插件,主要功能在于,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程…...
Linux操作命令之云计算基础命令
一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…...
【postgres】sqlite格式如何导入postgres数据库
step1 在ubuntu系统安装pgloader(centos系统难以直接通过yum安装,如果源码安装的话,会比较费劲) step2,执行如下python脚本 from pathlib import Path import subprocess dataset_dir Path(/app/sqlite_to_pg/chas…...
【ENSP实战】VLAN间通信的VLANIF三层路由配置详解(HCIA)
1. 为什么需要VLAN间通信? 在企业网络中,不同部门往往需要划分到不同的VLAN中。比如财务部在VLAN 10,市场部在VLAN 20,这是为了安全和管理方便。但问题来了:财务部有时候需要和市场部共享文件,这时候就需要…...
影子货币:商家跑路,储值卡变成废纸
中国影子货币全图谱 目录 中国影子货币全图谱 一、第一类:银行表外影子货币(规模最大,约50万亿元) 1. 银行现金管理类理财产品(规模约18万亿元) 2. 银行非保本理财产品(规模约22万亿元) 3. 银行同业存单与同业理财(规模约10万亿元) 二、第二类:非银金融机构影子货币…...
Python爬虫实战:逆向解析央视频加密参数(附完整代码)
Python逆向工程实战:解密央视频加密体系的技术探索 在当今数字媒体蓬勃发展的时代,视频平台的内容保护机制日益复杂。作为开发者,理解这些保护机制不仅有助于合规获取公开数据,更能深入掌握现代Web应用的安全设计思路。本文将带您…...
vscode-drawio:在VS Code中无缝集成专业图表设计的5大核心技术特性
vscode-drawio:在VS Code中无缝集成专业图表设计的5大核心技术特性 【免费下载链接】vscode-drawio This unofficial extension integrates Draw.io (also known as diagrams.net) into VS Code. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-drawio …...
AutoGen Studio实战:用Qwen3-4B模型快速打造智能客服助手
AutoGen Studio实战:用Qwen3-4B模型快速打造智能客服助手 1. AutoGen Studio简介 AutoGen Studio是一个低代码AI代理开发平台,它让开发者能够快速构建、组合和部署AI代理应用。基于AutoGen AgentChat框架构建,提供了可视化界面来管理多代理…...
别再只看吞吐量!大模型SLO达标却多烧41%电力?——实时能效可观测性体系建设全指南
第一章:大模型工程化中的能效优化策略 2026奇点智能技术大会(https://ml-summit.org) 大模型推理与训练的能耗问题已不再仅是运维成本考量,而是关乎碳中和承诺、边缘部署可行性及长期服务SLA稳定性的核心工程约束。在千卡级集群与百亿参数模型常态化落地…...
【CW32实战】从零到一:MDK环境配置与固件库点亮LED
1. 开发环境准备:MDK安装与固件库获取 第一次接触CW32系列单片机时,环境搭建往往是最让人头疼的环节。我刚开始用CW32F030的时候,光是安装软件就折腾了大半天。下面就把我踩过的坑和验证过的正确方法分享给大家。 首先需要下载MDK开发环境&am…...
终极免费虚拟光驱解决方案:WinCDEmu完整使用指南
终极免费虚拟光驱解决方案:WinCDEmu完整使用指南 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu 还在为找不到光驱而烦恼吗?还在为ISO文件无法直接访问而困扰吗?WinCDEmu为您提供了一站式的虚拟光…...
如何为ThinkPad T480安装macOS:OpenCore完整配置指南
如何为ThinkPad T480安装macOS:OpenCore完整配置指南 【免费下载链接】t480-oc 💻 Lenovo ThinkPad T480 / T580 / X280 Hackintosh (macOS Monterey 12.x - Sequoia 15.x) - OpenCore 项目地址: https://gitcode.com/gh_mirrors/t4/t480-oc 还在…...
FRCRN(16k单麦)效果惊艳:雨天户外采访录音中分离人声与雨滴噪声
FRCRN(16k单麦)效果惊艳:雨天户外采访录音中分离人声与雨滴噪声 1. 项目概述 FRCRN(Frequency-Recurrent Convolutional Recurrent Network)是阿里巴巴达摩院在ModelScope社区开源的单通道语音降噪模型,专…...
