应用界面设计(原生,自定义控件,设计与交互-小白必看)

news2024/9/20 1:00:25

目录

一图概览

界面实现方式

XML布局方式

JAVA或Kotlin代码布局

Android定制控件

Android原生核心控件

为什么不用原生?

定制控件三大方法

定制控件流程

触摸事件(input事件处理)流程

分发 (dispatchTouchEvent)

拦截 (onInterceptTouchEvent)

处理 (onTouchEvent)

实例Demo

优化界面

资源优化

代码优化

控件优化


一图概览


界面实现方式

XML布局方式

  1. xml文件添加控件,设置其属性和布局约束
  2. 可以在其他xml文件通过layout="@layout/资源布局id",导入其他xml文件作一个控件

JAVA或Kotlin代码布局

  1. 创建控件容器
  2. 创建具体控件
  3. 将创建控件添加到父容器
  4. 加载到Content


Android定制控件

Android原生核心控件

为什么不用原生?

  1. 原生过于刻板,无法满足一些特别需求(炫酷动画,创新功能)

  2. 布局层次过于复杂,影响程序性能

定制控件三大方法

  1. 基于现有控件继承扩展
  2. 通过现有控件组合布局
  3. 直接继承View,深度自定义

定制控件流程

  1. 构造函数负责属性的解析与初始化

  2. View由onMeasure()尺寸计算

  3. ViewGroup考虑子View布局位置

  4. 内容绘制,onDraw()实现形状、颜色、阴影等

  5. 交互实现Input事件的处理

  6. 提供外部调用的接口


触摸事件(input事件处理)流程

分发 (dispatchTouchEvent)

  1. 当触摸事件发生时,事件首先被传递给 ViewGroup 的 dispatchTouchEvent 方法。
  2. 如果 ViewGroup 有一个子视图可以处理该事件(即子视图的 onTouchEvent 方法返回 true),则事件会被传递给子视图。
  3. 如果没有子视图可以处理该事件(返回false),事件会传递给父视图。

拦截 (onInterceptTouchEvent)

  1. 在触摸事件被传递给子视图之前,ViewGroup 的 onInterceptTouchEvent 方法会被调用。
  2. 如果 onInterceptTouchEvent 返回 true,事件将被此父视图拦截,并且不会传递给子视图。
  3. 如果 onInterceptTouchEvent 返回 false,事件将传递给子视图。

处理 (onTouchEvent)

  1. 如果触摸事件没有被拦截,它将传递给子视图的 onTouchEvent 方法进行处理。
  2. 如果子视图的 onTouchEvent 返回 true,表示子视图已经处理了该事件。
  3. 如果子视图的 onTouchEvent 返回 false,事件将传递回父视图处理。

实例Demo

public class MyLinearLayout extends LinearLayout {

    private float initialX;

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

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

    public MyLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                initialX = ev.getX();
                break;
            case MotionEvent.ACTION_MOVE:
                float diffX = Math.abs(initialX - ev.getX());
                if (diffX > 10) { // 如果手指移动超过10像素,则拦截事件
                    return true;
                }
                break;
        }
        return super.onInterceptTouchEvent(ev);
    }
}

优化界面

资源优化

代码优化

控件优化

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

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

相关文章

【信创】Linux系统上ext4、XFS等文件系统的特点和适用场景 _ 统信 _ 麒麟 _ 方德

原文链接:【信创】Linux系统上ext4、XFS等文件系统的特点和适用场景 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天给大家带来一篇关于Linux系统上常见文件系统——如ext4、XFS等——的特点和适用场景的文章。选择合适的文件系统对于优化存储性能…

sh脚本之外JS也可以编写脚本

比方说APP每次打包后命名无规则 打得多了还杂乱 可以使用node脚本 批量删除 重命名 例如使用以下 Node.js 脚本来删除当前目录下的所有文件,并保留最近修改的一个文件名为lock.apk const fs require(fs); const path require(path);// 获取当前目录 const curre…

ZYNQ 7020 学习记录-1点灯

系列文章目录 1.点灯 文章目录 系列文章目录前言一、ZYNQ是什么?二、FPGA开发流程1.流程图2.工程管理3.需求分析4.系统框图5.编写RTL代码6.Modelsim 手动仿真7.Vivado工程 总结 前言 由于研究生课题组所研制的设备HIGH-POWER SHM SYSTEM是基于ZYNQ的,以…

【css】伪元素实现图片个悬停文字聚焦效果

实现重点: 文字覆盖在图片上: 通过使用 position: absolute 将 .box 文字盒子定位在图片上方。父容器 .img-wrap 使用了 position: relative 确保子元素的绝对定位在父容器的边界内生效。 创建悬停效果: 通过使用 &::before 和 &::…

滑块缺口研究实例(C#颜色滑块缺口计算)

缺口图图 测试网站 111https://www.591mf.top/duibi/hk.html using System; using System.Drawing;public class ColorGapCounter {public static int CountGaps(Color startColor, Color endColor, int threshold){int gaps 0;int startR startColor.R;int startG startC…

STM32按键控制小灯—HAL库

原理讲解: 以上是按键的原理图:(忽略GPIO口,因为可以自行设置) 需要注意的点有两个: ①100nF的电容:有效缓冲抖动的电平信号,有按键消抖的作用 什么是按键抖动呢?&am…

2024年蓝牙耳机哪个牌子最值得买?最建议入手的四个品牌型号推荐

随着科学技术的不断发展,蓝牙耳机已经逐渐成为市场上的智能配件选择,其市场份额也在不断增长。但是,在众多品牌中,很多的蓝牙耳机会出现音质不佳、连接不稳定的问题,甚至可能对消费者的听力造成潜在风险。那么&#xf…

openai api key automatically rotating when deployed

题意:部署时自动轮换 OpenAI API 密钥 问题背景: Im building a web page using openai gpt API in reactjs. I saved my API key on .env file then gitignored it. And I deployed my code with gh-pages, but openai detects it and rotate the key …

一文详解:线索分配的3种策略

针对企业经常投放的平台和渠道(如抖音、快手、公众号、官网等),纷享销客搭建了多平台接口与CRM互通,多渠道的线索可实时同步到CRM系统中。经过前面的线索分层处理,线索再根据不同线索池分配规则或者自定义分配规则设计,将线索下发给相关方处理…

银行总分支文件分发系统:在安全与效率之间找到平衡

银行的组织结构通常根据其规模、业务范围和地域分布而有所不同,但一般会包括以下几个层级:总行-区域总部或分行-分行-支行-业务中心或服务中心-国际分支机构-附属机构或子公司。 在日常中,存在总分支文件分发的业务场景,文件类型通…

盘点8大跨境电商平台发展前景及选品分析(Shopee、eBay篇)

跨境电商行业在全球范围内持续发展,各大平台各有特色,针对不同的市场和消费者群体提供多元化的服务。以下是亚马逊、Shopee、TikTok、TEMU、速卖通、eBay、Lazada、SHEIN这八大跨境电商平台的背景、主要针对群体、消费者购物偏好及选品建议的简要介绍&am…

RIPRO主题美化-首页底部纯标题文章展示模块+网站统计模块美化 WordPress主题美化

教程 1、找到wp-content/themes/ripro/assets/css/diy.css并将附件内的diy.css内容整体复制进去并保存 2、找到wp-content/themes/ripro/parts/home-mode/ulist.php并将附件内的ulist.php上传进去替换即可 3、找到wp-content/themes/ripro/functions.php并将附件内的functio…

解析京东JD商品详情API返回值

京东平台 API 返回值可以在多个方面进行实战应用,以下是一些常见的场景: 应用领域详细描述商品管理- 库存监控:通过返回的库存数据,及时掌握库存数量,设置预警并合理安排补货,同时分析库存变化趋势以优化库…

SAP PO平台的接口资产目录管理及协作案例(基于AIM平台)

一、客户背景 某客户现在的各个系统数量较多,系统接口已全部接入SAP PO中间件软件进行统一性管理。 但由于SAP PO系统的可视化和对多组织、多用户的协作能力较弱,遂使用AIM软件针对各个不同的系统接口做出API规范,并生成接口资产目录&…

存储管理功能

在这里插入图片描述

DevOps入门(下)

原文阅读:【巨人肩膀社区博客分享】DevOps入门 3: 创建项目 代码在本地修改----提交到远程gitee----触发jenkins整个自动化构建流程(打包,测试,发布,部署) 创建spring_boot项目 创建git仓库&…

便宜的电容笔推荐:2024返校季精选五款平价又好用的iPad电容笔!

近几年,随着无纸化学习的日益普及,电容笔的重要性也逐渐凸显。但是,原版电容笔的价格过高,对于很多学生党而言,寻找一款平价又好用的iPad电容笔就成了最优的选择。可是市面上的品牌很多,辨别优质产品的难度…

以简单的例子从头开始建spring boot web多模块项目(一)

目的:从头梳理,如何手工从头建立多模块项目。 步骤: 1、建立maven项目,类型:maven Archetype,Name:ParentDemo 选择JDK版本,Archetype:org.apache.maven.archetypes:maven-archetype-quickstart…

成都无人机飞手考证详解及前景分析

一、考证详解 1.1 考证背景与重要性 随着无人机技术的迅猛发展,无人机在航拍、农业、救援、物流等多个领域展现出广泛应用价值。为了规范无人机行业,保障公共安全和空域秩序,国家对无人机操作员实施了严格的资格认证制度。考取无人机飞手证…

公司员工电脑桌面太乱如何解决?桌面管理软件一招解决!

“工欲善其事,必先利其器。” 在数字化管理的时代背景下,选择合适的桌面管理软件就如同为企业网络管理装上了一双慧眼。 员工的电脑桌面往往因为长时间的使用而变得杂乱无章,这不仅影响了工作效率,还可能给企业信息安全带来隐患。…