18.自定义UI(画布)-单点触摸-多点触摸

Unity 移动端简单手势控制(移动,旋转,缩放) using UnityEngine; using System.Collections; using System.IO; /// <summary> /// 点击屏幕实现缩放与旋转,移动 /// </summary> public class FingerTouch : MonoBehaviour { private Touch oldTouch1; //上次触摸点1(手指1) 阅读详情

一.知识概要

二.案例

1.自定义控件的触摸事件(返回值问题)

效果图:


思路:


具体代码实现:

a.布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/root"
    tools:context="com.zking.android18_diyui_touch.MainActivity">

    <com.zking.android18_diyui_touch.MyButton
        android:layout_width="300px"
        android:layout_height="300px"
        android:id="@+id/mbtn_main_button" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是系统自带的(控件)按钮"
        />

</LinearLayout>
b.Java代码

MyButton.java

package com.zking.android18_diyui_touch;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

/**
 * 自定义控件
 * 把按钮MyButton当做Button使用
 */

public class MyButton extends View {

    public MyButton(Context context) {
        super(context);
    }

    public MyButton(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public MyButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public MyButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);//报错:Alt+回车-->Disable   跳过检查
    }

    /**
     * 画一个按钮
     *   canvas 画布
     *   Paint  画笔
     *   canvas.draw 点出你要画的东西
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawColor(Color.RED);//背景颜色
        //1.实例化路径
        Path path=new Path();
        path.moveTo(100,100);//默认的起始坐标(线的开始坐标)
        path.lineTo(300,100);//开始画线(画到哪里去:线的终点坐标) 左300,高100
        path.lineTo(150,300);
        path.lineTo(200,50);
        path.lineTo(250,300);
        path.lineTo(100,100);
        //2.实例化一个画笔
        Paint paint=new Paint();
        paint.setColor(Color.YELLOW);//给画笔设置颜色(即实心的星星的颜色)

        paint.setStyle(Paint.Style.STROKE);//设置空心STROKE
        paint.setStrokeWidth(20);//设置画笔的粗细(即星星线条的粗细)
        //a.画路径
        canvas.drawPath(path,paint);

        paint.setStrokeWidth(3);//设置画笔的粗细
        paint.setColor(Color.BLUE);//设置字的颜色
        paint.setTextSize(30); //设置字的大小
        //b.画文字(课外:让字动起来)
        canvas.drawText("萌萌哒",150,150,paint);//字的位置
    }

    //没有调,但是只要触摸了就自动调用这个事件
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.i("test","自定义的按钮的触摸事件---->回调");
        return false;
    }

}
MainActivity.java
package com.zking.android18_diyui_touch;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    private MyButton mbtn_main_button;
    private LinearLayout root;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mbtn_main_button = (MyButton) findViewById(R.id.mbtn_main_button);
        root = (LinearLayout) findViewById(R.id.root);

        //给自定义按钮设置触摸事件
        mbtn_main_button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.i("test","自定义的按钮的触摸事件---->监听");
                return false;//true与false表示事件会不会传播(回调)   false继续调下一个   true不会传播
            }
        });

        //给root设置触摸事件(布局的事件)
        root.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.i("test","自定义的按钮所在布局的触摸事件---->监听");
                return false;
            }
        });
    }

    //Activity的事件
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.i("test","自定义的按钮所在Activity的触摸事件---->回调");
        return true;
    }

}


2.单点触摸









Android帧抢占协议技术剖析:触摸事件与UI绘制的智能调度优化方案 本文深入解析Android帧抢占协议技术,针对触摸事件与UI绘制的资源竞争问题,提出腾讯的优先级调度策略(紧急事件抢占、增量渲染、时间片补偿),结合华为Mate40 Pro的优化案例,通过代码实现与性能对比,验证帧抖动率从18%降至3.2%的显著提升。技术覆盖Choreographer调度、三重缓冲配置及动态刷新率调整,为开发者提供企业级流畅体验解决方案。 阅读详情

相关推荐

嵌入式图形用户界面中的非触摸式手势交互

我们将解释为什么产品支持非接触式交互会具有商业意义,以及设计师和开发人员在其项目中需要考虑的一些方面。

Crank_Storyboard的博客 1041

STM32F411RE与AD7490高精度ADC系统设计与优化

模数转换器(ADC)是连接模拟世界与数字系统的关键器件,其核心原理是通过采样保持电路和逐次逼近寄存器(SAR)实现信号量化。在工业测量和仪器仪表领域,高精度ADC系统需要综合考虑电源设计、信号调理和数字接口等关键技术。以STM32微控制器驱动AD7490 SAR-ADC的典型方案为例,通过SPI接口配置和DMA传输优化,可实现1MSPS的高速数据采集。该系统设计特别关注时钟抖动抑制(要求<4.86ps)和数字滤波算法实现,在500kHz输入频率下仍能保持82dB以上的信噪比。这类方案广泛应用于振动分析、医疗

weixin_30357231的博客 461

18、CE设备的自动启动应用与自定义UI开发

本博客详细介绍了CE设备的自动启动应用和自定义UI开发的关键技术和实现方法。内容涵盖CE设备的输入输出机制、自动启动应用的多种实现方式及其优缺点对比,以及如何通过示例代码和开发工具(如VS2005)创建自定义UI。此外,还讲解了使用VB 2005开发适用于CE设备的自定义用户界面,并将其集成到系统中的完整流程。博客还提供了常见问题的解决方案和未来发展趋势分析,为开发者提供了全面的技术指导和实践参考。

nft7creator的博客 135

Android 自定义UI-单点触摸-多点触摸

自定义UI 自定义其实就是自定义的控件,可以自己随意的定义其的大小及形状 代码较为简单,如下: package com.example.myas_018; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics

JHandYY的博客 501

Android自定义控件实战教程:18个示例源码解析

在移动应用开发中,界面的美观性和用户体验是至关重要的两个因素。Android平台为开发者提供了一套丰富的控件库,但在实际开发过程中,经常会遇到需要定制化控件的场景。这时,自定义控件就显得尤为重要。自定义控件是Android开发中的一个高级主题,它允许开发者根据自己的需求创建新的控件,或者是修改现有的控件行为和外观。从简单的按钮样式定制,到复杂的数据展示和动画效果,自定义控件的灵活性极大地扩展了开发者的设计空间。

weixin_42612804的博客 608

全网最新首发纯干货:微信数据库表结构完整分析(一)

找不到微信DB表结构说明?找不到具体字段的解释?来这里,全网最完整版!!!

killghosts的博客 4925

unity 在UI中 点击画布 返回鼠标所在画布的位置

这个功能很实用 大家可以试试 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class aaa : MonoBehaviour { Vector3 go ; public GameObject bul; public C...

huhudeni的博客 2620

CTP Python API及Demo(利用Swig 封装)Windows版(6.6.1traderapi)

环境:visual studio2015、python3.9、 参考的是景色大神的教程自己制作,因为直接用它编译好的无法使用,遂自己编译。 从CTP官网上下载CTP API点击下载。这里用的版本是v6.6.1_P1_tradeapi,想使用不同的版本下载即可: 安装Swig软件,本文中所用的Swig是swigwin-4.0.2版本,点击下载。下载后解压,将swig路径添加到环境变量中。 安装python,注意要安装64位版本,将环境变量配置好。本文所用的是3.9版本。 通过Swig得到pyth.

ProgramVAE的博客 2543

HTML5很少用到的例子:画布多点触控与KineticJS规模形状!

注:本实验室只能支持多点触控手势,如iOS设备上,因为它利用多个触摸事件。 说明:使用移动设备,支持多点触控手势,比如iOS,拖拽一个形状通过触摸它,然后把你的手指在屏幕上,利用,激活一个形状和规模一个活跃的形状的屏幕。 body { margin: 0px; padding: 0px; }

yamin纯青版编程 1377

[QDS]从零开始,写第一个Qt Design Studio到程序调用的项目

最近在使用Qt Design Studio进行开发,但是简中网上要不就是只搜得到Qt Designer(Qt Creator内部库),要不就只搜得到一点营销号不知道从哪里搬来的账号,鉴于Qt Design Studio是一个这么强大的软件,自然是需要来进行一下小小的实践的。所以开了这篇文章,方便没有使用过Qt Design Studio 和 QML的开发者也可以快速上手QDS(Qt Design Studio)。在本文中,你将学会如何使用QDS开发一个简单的QML程序,与你的C++后端代码进行交流。

Andius的博客 8212

从零开始搭建一个高性能电流镜:手把手教你设计Wide-Swing Cascode结构

本文详细解析了Wide-Swing Cascode电流镜的设计原理与实战流程。针对低压高性能模拟电路设计的核心挑战,文章手把手指导如何从理论分析、参数计算到仿真验证,搭建一个兼具高输出阻抗和低输出电压裕度的电流镜结构,并深入探讨了偏置电路生成、性能优化及版图匹配等关键要点。

weixin_29294975的博客 623

多点触摸画板(MultiTouchCanvas)

这是个简单的支持多点触摸的画板控件, 绘制功能基于WPF InkCanvas,也是我drawTool系列文章的开篇。 阅读该文章后可能产生一些问题: 1. 如果对生成的笔迹对象进行控制 如果要对生成的stroke笔迹进行控制,这里需要单独用一个基于UIElement的对象关联到笔迹对象,例如Polyline元素的points绑定到stroke的点集合,这样对笔记的对象控制就转化为对UI...

weixin_34185560的博客 907

在Keil uv5里面添加STC元器件库,不影响其他元件

先到网上下载stc.CBD(宏晶网站的地址实效了)还有STC新系列单片机的头文件,宏晶的网站就有1、在Keil/C51/INC下新建目录"STC"文件夹, 把所有STC新系列单片机的头文件拷贝到"STC"目录下。2、下载的用于keil下的STC器件数据库更名为STC.CDB并拷贝到Keil/UV4目录下。3、打开Keil文件夹下的TOOLS.ini文件。4、在[UV2]下键入CDB0="UV2\S

技术联盟 1万+

21、多点触摸技术

什么是多点触摸技术 多点触摸是一项很早就使用的技术,从IPhone第一代就支持多点触摸。要想了解什么叫多点触摸,首先应了解什么是单点触摸。早期的触摸屏无论有多少个手指接触到屏幕,系统只会认为第1个接触到屏幕的手指是有效的,后来接触到屏幕的手指将被忽略。这就是所谓单点触摸,单点就是指第1个接触到屏幕的手指。 了解了单点触摸,多点触摸就很容易理解了。所谓多点...

dianwei5413的博客 150

Unity的粒子系统使用shadergraph(内置管线)制作的一个顶点偏移shader,但是粒子模型移动时,顶点也会偏移?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1174

深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总

本文简要介绍深度学习的前向传播与反向传播,以及前馈神经网络与反馈神经网络。

haopinglianlian的博客 3042

多点触摸

多点触摸 安卓多点触摸画圆,手指抬起圆消失 先写一个圆的实体类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Boucher的博客 546

基于改进Unet的多场景水果图像分割与分类研究

本文针对复杂场景下的水果图像分割问题,提出了一种改进Unet模型。通过构建包含8类水果、3种成熟度及多种干扰场景的数据集,采用ResNet50与MobileNetV3作为骨干网络,并在跳跃连接层集成CBAM注意力机制。实验表明,改进模型在测试集上达到91.6%的mIoU,推理速度提升23%,特别在重叠水果和低光照场景表现突出。研究为农业视觉检测提供了有效解决方案。

AI的内部世界的博客 303

单点触摸

1.代码演示: (1)布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/to

GD_Tiny的博客 333

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

cocos2d-x中的多点触摸的问题

在cocos2d-x中,对于触摸事件有两种模式: 大家都知道,第一种为 CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);//添加触摸委托, 也是cclayer默认的模式,可用于多点触摸; 第二种为 CCDirector::sharedDirector()-

u013321328的专栏 1168

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android-自定义UI与触摸事件

自定义(MyButton)按钮 package com.zking.administrator.g160628_android18_diyui_touch; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.

XHui_Lin的博客 417

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Beta 3版火狐4支持Windows 7多点触摸

顶一个 据国外媒体报道,Mozilla公司日前终于放出了火狐迷们期待已久的Firefox 4 beta 3版网络浏览器。据透露,从功能上来看Firefox 4 beta 3浏览器首先是给微软 Windows 7用户带来了一大惊喜,因为该浏览器终于充分利用了微软最新操作系统的多点触摸输入功能,当然要想感受这一功能还需要显示器 支持多点触摸功能。如今网...

anjichan4261的博客 95

Autojs基础-用户界面(ui)

脚本开发需要有界面与用户进行交互,许多脚本开发语言已经有自己的ui控件的使用方式,比如按键精灵的ui界面设置非常便捷。按键精灵的ui控件的取值和赋值方式都已经封装好了,但是autojs很多时候只提供控件,取值和赋值需要自己通过安卓进行封装,甚至需要自己手搓控件功能。以游戏为例,会有各种任务,我们可以根据选择的任务运行脚本,最好的就是多选框单选的方式,这样比较好看。但是,autojs没有让多选框单选的方式,我们又无法保证用户每次只选择一个任务,我们就需要手搓这个功能。

qq_55896432的博客 1868

AI智能棋盘融合SAMD21G18触摸感应实现落子确认

本文介绍基于SAMD21G18微控制器的电容式触摸感应技术在AI智能棋盘中的应用,通过集成PTC模块实现高精度、低功耗的落子识别,支持金属底座棋子无侵入感知,并与主控协同完成AI对弈反馈,具备成本低、稳定性强、易于量产等优势。

weixin_42581846的博客 709
上一篇: 13.退出应用程序(递归和栈退出)
下一篇: 19.实现单点触摸画圆
_北冥有鱼_
博客等级 码龄10年 41粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值