Android-自定义UI与触摸事件

安卓UI面试题 21-25 21. ListView 数据集改变后, 如何更新 ListView? 阅读详情

自定义(MyButton)按钮

package com.zking.administrator.g160628_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;

/**
 * Created by Administrator on 2017/7/8 0008.
 */

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);
    }

    /**
     *
     * @param canvas 画布
     *         Paint  画笔
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawColor(Color.RED);
        //实例化路径
        Path path=new Path();
        path.moveTo(100,100);
        path.lineTo(300,100);
        path.lineTo(100,300);
        path.lineTo(200,10);
        path.lineTo(250,300);
        path.lineTo(100,100);
        //实例化一个画笔
        Paint paint=new Paint();
        paint.setColor(Color.YELLOW);

        //设置空心
        paint.setStyle(Paint.Style.STROKE);
        //设置画笔的粗细
        paint.setStrokeWidth(20);

        //画路径
        canvas.drawPath(path,paint);

        //设置画笔的粗细
        paint.setStrokeWidth(3);
        paint.setColor(Color.GREEN);
        //设置字的大小
        paint.setTextSize(38);
        //画文字
        canvas.drawText("呵呵呵",150,150,paint);
    }

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

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    //设置宽和高
    setMeasuredDimension(500,300);
}
package com.zking.administrator.g160628_android18_diyui_touch;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;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; } }); //给root设置触摸事件 root.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.i("test","自定义的按钮所在布局的触摸事件---->监听"); return false; } }); } @Override public boolean onTouchEvent(MotionEvent event) { Log.i("test","自定义的按钮所在Activity的触摸事件---->回调"); return true; }
//第二种设置高和宽的方法:用Java代码重写onMeasure方法
@Override
protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){
super.onMeasure(widthMeasureSpec,HeightMeasureSpec);
//设置宽和高
setMeasureDimension(400,500);
}
}


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.administrator.g160628_android18_diyui_touch.MainActivity">
    <!--设置高和宽第一种方法:在xml中直接设置-->
    <com.zking.administrator.g160628_android18_diyui_touch.MyButton
        android:layout_width="300px"
        android:layout_height="300px"
        android:id="@+id/mbtn_main_button"
        />
   <com.zking.administrator.g160628_android18_diyui_touch.MyButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/mbtn_main_button"
        />
</LinearLayout>




安卓UI面试题 6-10 通过继承系统控件(View子类控件或ViewGroup子类控件)来完成自定义View,一般是希望在原有系统控件基础上做一些修饰性的修改,而不会做大幅度的改动,如在TextView的文字下方添加下划线,在LinearLayout布局中加一个蒙板等。组合控件,顾名思义,就是将系统原有的控件进行组合,构成一个新的控件。实际开发中,标题栏就是一个比较常见的例子。如果一个view需要设置1:2的比例显示,可以在LinearLayout中设置weightSum进行设置总的比例,然后在设置子View的比例。 阅读详情

相关推荐

安卓UI面试题 11-15

11. 如何将Activity设置成窗口的样式? 第一种方法,在styles.xml文件中,可以新建如下的类似Dialog的style。 第二种方法,在AndroidManifest.xml中在需要显示为窗口的Activity中添加如下属性: android: theme=“@style/Theme.FloatActivity”即可。也可以直接添加对应需要展示为Dialog style的Activity的android: theme属性为android: theme=“@ android: sty

我很好 295

Android自定义控件(UI,点击事件)

Android自定义控件(UI,点击事件)

fusu2178192的博客 1675

Android UI设计与开发全面指南

Android用户界面(UI)是用户与应用程序交互的最直观媒介。UI系统负责显示和管理应用的所有视图和控件,包括按钮、文本框、列表等。为了设计出直观、易用且美观的应用界面,开发者需要深入理解Android UI系统的核心组件及其使用方式。Android UI的核心组件主要包括以下几种:Activity:应用中的一个单独屏幕,用于承载用户界面,管理生命周期。Fragment:可复用的UI模块,能够在一个Activity中动态添加或移除。View。

weixin_35752122的博客 858

Android canvas kline图表头像绘制和点击事件回调方法

Android canvas kline图表头像绘制和点击事件回调方法

ajwdwl的博客 376

Android自定义SeekBar与手势控制

在本章中,我们将深入探讨如何自定义绘制SeekBar的外观,以适应不同的界面设计和用户体验需求。我们将通过分析视觉元素和色彩布局,以及掌握如何利用绘图API来自定义图形和动画效果,来详细讲解外观设计和实现技术。除了静态的图形,我们还可以通过绘图API来实现一些动态的视觉效果。比如进度改变时,可以给SeekBar添加颜色渐变或光影效果,以增强用户的视觉体验。// 示例代码:绘制一个简单的进度条颜色渐变效果在上面的示例代码中,我们使用为SeekBar创建了一个简单的颜色渐变效果。

weixin_35391606的博客 1001

Android仿QQ空间底部弹出菜单的实现

在移动应用开发中,用户界面(UI)设计是至关重要的环节之一。优秀的UI不仅能够提高用户体验,而且还能为应用带来更多的用户粘性。Android系统因其开源和广泛的设备支持,成为了开发者青睐的平台。一个良好的Android应用界面设计,需要考虑到多种因素,如美观、易用性和系统兼容性。PopupWindow是在Android中实现自定义悬浮窗口的一种方式,它提供了灵活的布局和丰富的控制选项,可以自定义弹出窗口的大小、位置和显示样式。

weixin_42510243的博客 1002

android canvas 点击事件,android Canvas 画板 和 OnTouch 事件

public class MainActivity extends Activity {ImageView image;Button bt_save, bt_clear;int downX, downY, moveX, moveY;Canvas canvas;Bitmap bitmap;Paint paint;@Overrideprotected void onCreate(Bundle save...

weixin_39982017的博客 1580

自定义个人中心界面以及设置点击事件

Android自定义view实现个人中心设置界面,同时设置每个item的点击事件,自定义接口点击事件和原生点击事件,同时xml设置属性和代码设置属性。

Android 点击事件,如何在界面上或者某个控件上添加点击事件

安卓点击事件,Android点击事件

As_thin的博客 2553

详解Canvas事件绑定

众所周知canvas是位图,在位图里我们可以在里面画各种东西,可以是图片,可以是线条等等。那我们想给canvas里的某一张图片添加一个点击事件该怎么做到。而js只能监听到canvas的事件,很明显这个图片是不存在与dom里面的图片只是画在了canvas里而已。下面我就来简单的实现一个canvas内部各个图片的事件绑定。 我先来讲下实现原理:其实就是canvas绑定相关事件,在通过记录图片所在canvas的坐标,判断事件作用于哪个图片中。这样讲是不是感觉跟事件代理有点相似咧。不过实现起来还是有稍许复杂的。 ps:下面的代码我是用ts写的,大家当es6看就好了,稍有不同的可以查看 typescri

安装Tailscale

如果返回 /usr/bin/tailscale 或类似路径,说明已安装但 sudo 可能找不到它。如果 which tailscale 没有输出,说明安装失败,重新执行安装步骤。Tailscale 的后台服务 tailscaled 必须运行。检查 tailscaled 服务是否运行。检查 tailscale 命令是否存在。

FairLikeSnow的博客 1471

AndroidStudio安卓虚拟摇杆组件:为游戏应用提供精准控制

AndroidStudio安卓虚拟摇杆组件:为游戏应用提供精准控制 去发现同类优质开源项目:https://gitcode.com/ 在移动应用开发中,虚拟摇杆是游戏和某些类型应用程序中常用的交互元素。今天,我们要介绍的是一个适用于Android平台的优秀开源组件——AndroidStudio安卓虚拟摇杆组件。它不仅标准化了摇杆设计,更提供了精确的控制,让开发者可以轻松集成到自己的项目中。 项目介...

gitblog_06759的博客 754

信噪比(Signal-to-Noise Ratio, SNR)详细介绍

信噪比(Signal-to-Noise Ratio,SNR)是衡量信号质量的重要参数,表示有用信号的功率与背景噪声功率的比值。其中,\( P_{\text{signal}} \) 表示信号功率,\( P_{\text{noise}} \) 表示噪声功率。- 音频处理:在音频设备和录音系统中,SNR决定了音质的好坏,高SNR表示音频信号更清晰,噪声更少。- 低SNR:信号中噪声成分较大,接收端难以分辨有用信号和噪声,可能导致误码率高,通信质量差。SNR定义为信号功率与噪声功率之比,通常用分贝(dB)表示。

qq_58860480的博客 8万+

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

ChatGPT Plus账号被降智?3个实用检测方法+终极解决方案(附国内支付指南)

本文针对ChatGPT Plus账号性能下降问题,提供了3个科学检测方法和系统级解决方案。通过详细分析症状、专业诊断技巧和优化策略,帮助用户有效应对GPT-4o等高级功能失效、响应质量下降等问题,特别包含国内用户关心的支付方案和账号管理建议。

weixin_42639633的博客 472

语音AI Agent落地实战:从ASR-NLP-TTS到多通道协同决策

语音AI Agent并非简单的自动语音识别(ASR)、自然语言处理(NLP)和文本转语音(TTS)三模块串联,而是在真实场景中需兼顾实时性、鲁棒性与隐私合规的端到端交互系统。其核心原理在于打破‘文本中间态’依赖,通过声学-文本-上下文多通道协同决策,融合原始音频特征、N-best置信度与设备环境信号,实现动态意图推演。技术价值体现在低延迟(如120ms离线唤醒)、高抗噪(-5dB SNR下WER≤25%)及强可控性(断网降级、本地热更新)。典型应用场景覆盖车载语音、智能家居与银行网点等边缘受限环境,尤其适用

weixin_29065959的博客 326

java触摸_简单讲解Android开发中触摸和点击事件的相关编程方法

在Android上,不止一个途径来侦听用户和应用程序之间交互的事件。对于用户界面里的事件,侦听方法就是从与用户交互的特定视图对象截获这些事件。视图类提供了相应的手段。在各种用来组建布局的视图类里面,你可能会注意到一些公共的回调方法看起来对用户界面事件有用。这些方法在该对象的相关动作发生时被Android框架调用。比如,当一个视图(如一个按钮)被触摸时,该对象上的onTouchEvent()方法会被...

weixin_29150195的博客 526

Python3实现基于ARIMA模型来预测茅台股票价格趋势

ARIMA(Autoregressive Integrated Moving Average)模型是一种广泛使用的时间序列分析方法,它可以用于对未来的数据进行预测。ARIMA模型由自回归模型(AR模型)、差分整合模型(I模型)和移动平均模型(MA模型)组成,因此也被称为ARIMA(p,d,q)模型。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。具体来说,ARIMA模型可以通过以下步骤进行建模:数据预处理:对时间序列进行平稳性检验,如果不满足平稳性,则进行差分操作。

m0_64336780的博客 2万+

Android开发自定义UI组件

Android开发自定义UI组件实现红色小球跟随手指移动 要写实现自定义UI组件,要创建一个BallView类,继承View类,在BallView类中创建画笔,然后重写OnDraw()方法和OnTouchEvent()方法。 /** * Created by nuist__NJUPT on 2021/5/9. * 自定义UI组件 * View组件在布局中是一个矩形的空白区域,没有任何内容 * 而UI组件之所以有内容,是因为继承了View组件之后在其提供的空白区域上重新绘制外观,这就是UI组件的实现原

nuist_NJUPT的博客 1194

BOSS直聘招聘端自动化识别策略调整(20250905)

2025年9月BOSS直聘调整账号登录策略,禁止使用辅助工具,违者将禁用PC端和网页端2个月。作者认为这一政策可能调整,因为AI辅助已成趋势,严格限制会影响付费客户。企业使用辅助工具的主要原因是平台推送的候选人匹配度低,导致沟通成本高。虽然部分企业滥用功能骚扰求职者,但BOSS直聘仍需依赖这些付费客户。新规可能得罪大客户,但只要有需求,市场总会找到应对方案。

企智软件 827

SAP中关于预测需求的重要载体:计划独立需求

预测,就是为了调节客户需求的波动、不平衡,使企业的生产计划、物料计划尽量平稳、有序的必备工具。计划独立需求,Planned Independent Requirement(PIR)是SAP系统中最常见的预测需求。

saplakes的博客 1878

android 自定义ui模版,Android开发之自定义UI组件详解

Android开发自定义UI组件实现红色小球跟随手指移动要写实现自定义UI组件,要创建一个BallView类,继承View类,在BallView类中创建画笔,然后重写OnDraw()方法和OnTouchEvent()方法。/*** Created by nuist__NJUPT on 2021/5/9.* 自定义UI组件* View组件在布局中是一个矩形的空白区域,没有任何内容* 而UI组件之所以...

weixin_29901323的博客 520

可食用野生植物检测实战:基于YOLOv11的智能识别系统全流程指南

本文介绍了一种基于YOLOv11的可食用野生植物智能识别系统。该系统通过深度学习技术,能在0.2秒内精准识别植物是否可食用,准确率高达92%。文章详细阐述了从数据采集、标注到模型训练、验证的全流程,并开发了用户友好的Tkinter交互界面。该系统解决了户外探险和植物研究中植物识别的痛点,具有高精度、实时性和强泛化能力的特点,为户外安全提供了智能化解决方案。

FJN110的博客 164

Android-自定义UI-设置画布的大小

//自定义一个类,用来写ui界面 public class MyButton extends View { public MyButton(Context context) { super(context); } public MyButton(Context context, @Nullable AttributeSet attrs) {

umbrella_419的博客 7699

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android 自定义UI控件一.View的基本绘制

很多人都知道Android控件的基本用法,比如Button,CheckBox,progressBar。但是确不知道Button等控件的内部实现原理。前些天上智联招聘上看了一下大公司的对安卓程序的要求。发现高端Android开发,都需要会自定义控件。这里我简单的介绍一下如何自定义一个Android控件。通过自定义控件和动画的配合,可以很容易的实现酷炫的UI 自定义的控件允许当使用者的手指触摸屏幕时

a1984446211的博客 1617

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android应用开发学习笔记之开发自定义UI组件

作者:刘昊昱  博客:http://blog.youkuaiyun.com/liuhaoyutz 参考书籍:Android从入门到精通(明日科技)   在Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成,其中View类是所有UI组件的基类,而ViewGroup是容纳这些UI组件的容器,其本身也是View类的子类。在ViewGroup中,除了可以包含普通的Vi

Linux/Android开发记录 2913

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 布局动画
下一篇: Android-检测手机多点触摸点数
XHui_Lin
博客等级 码龄10年 27粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值