学习自定义view

简单说说Android自定义view学习推荐的方式 这几天比较受关注,挺开心的,嘿嘿。 这里给大家总结一下学习自定义view的一些技巧。 1.首先 去看看鸿洋神的博客 Android 自定义view(1). 鸿洋神的入门教程讲的很详细。再次膜拜。 然后我这里对上面博客补充一些内容,那就是MeasureSpec相关的一些东西,这些东西我在《圆形百分比》这篇博客里提到过。 ---------------------------- 阅读详情

抽了点时间,看了一下自定义view,打算学习一下这方面的知识。都说这是Android进阶的必经之路。想要进阶的话,那自然是免不了了。
本篇学一下xml中自定义属性来控制view的效果。
第一步:
res/values文件夹下新建attrs.xml文件,里面声明自定义view时,可以在xml里用到的属性。这里以一个文本间隔属性为例来说明,当然,可以添加多个属性。
例如:文字间距,声明如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="styleAttr">
        <attr name="textSpacing" format="float"/>
    </declare-styleable>
</resources>

这个textSpacing到时就是可以在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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.szh.demo.MyView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:textSpacing="1" />
</LinearLayout>

这里面要注意添加命名空间。
第二步:继承View,获取属性并使用属性。
代码如下:

public class MyView extends View {

    private Paint paint;
    private float textSpacing;//字体间距

    public MyView(Context context) {
        this(context, null);
    }

    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        //获取属性值
        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.styleAtt);
        textSpacing = array.getFloat(R.styleable.styleAttr_textSpacing, 0);
        array.recycle();
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setAntiAlias(true);
        paint.setTextSize(30);
        //拿到属性值,自定义效果时可直接拿来用
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            paint.setLetterSpacing(textSpacing);
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawText("镜花水月", 0, 30, paint);
    }
}

Android从零开始:我的自定义view学习过程 做android也有一段时间了,虽然基本都是在自学,不过自我感觉还是良好。。。 然而仅仅是“自我感觉”而已。前段时间发现自己对自定义view真是一窍不通啊! 以前基本都是用系统控件、开源控件什么的,从没有自定义过控件,虽然平时用自定义view的场合可能也不多, 但是通过学习自定义view可以帮助理解android view的绘制流程等问题,还是灰常值得学习的。 但是现在不会肿么办! 阅读详情

相关推荐

第8章 Stata主成分分析与因子分析

在进行数据统计分析时,还往往会遇见变量特别多的情况,而且很多时候这些变量之间还存在着很强的相关关系或者说变量之间存在着很强的信息重叠,如果我们直接对数据进行分析,一方面会带来工作量的无畏的加大,另一方面还会出现一些模型应用的错误,于是主成分分析与因子分析应运而生。这两种分析方法的基本思想都是在不损失大量信息的前提下,利用较少的独立变量来替代原来的变量进行进一步的分析。 8.1主成分分析 基本思想是将众多的初始变量整合成少数几个互相无关的主成分变量,而这些新变量尽可能地包含...

qq_45112156的博客 5万+

最简单下拉刷新,Google最新(可刷新任何控件)

Google终于出下拉刷新控件了,你们知道吗?                                                                           2014年3月29日 XML文件需要引用android.support.v4.widget.SwipeRefreshLayout控件,在里面可以放置任何一个控件,包括ListView,scroll

scry5566的专栏 1838

Windows本地化部署Dify完整指南

本文详细介绍了在Windows系统上本地化部署Dify的完整步骤,涵盖了Docker Desktop的安装与配置、Dify源代码的获取、环境变量的设置、服务的启动与管理、以及常见问题的解决方案。文章首先指导用户如何下载和安装Docker Desktop,并配置WSL 2功能。接着,详细说明了如何获取Dify源代码,并通过Docker Compose启动服务。文章还提供了高级配置指南,包括如何配置大语言模型和更新Dify版本。最后,针对Docker镜像拉取失败等常见问题,提供了详细的诊断和解决方案。通过本文,

jacky_zhuyuanlu的博客 1万+

使用autocomplete实现google下拉框

1. 在页面引入js和css //使用本地文件时引入此js 2. //增加如下代码 $().ready(function() { $("#autocompletebox").autocomplete("search.php", { width: 260, selectFi...

Yang_Ever的专栏 309

从零到一:用STM32 FOC算法驯服无刷电机的艺术

本文详细介绍了如何使用STM32和FOC算法实现无刷电机的高性能控制。从硬件搭建、参数识别到闭环调节,一步步解析FOC算法的核心原理与调优技巧,帮助开发者掌握电机控制的关键技术,实现从零到一的精准驯服。

kkk56的博客 919

让 AI 学会“慢思考”:MCP Sequential Thinking 深度部署与使用指南

摘要: MCP Sequential Thinking 是一种让AI具备"慢思考"能力的技术,通过动态调整思维路径解决复杂问题。本文详细介绍了在Windows、macOS和Linux系统下的部署方法,包括环境准备、配置文件修改等步骤。该技术通过"产生想法-评估需求-修正路径"的循环机制,显著提升AI在代码设计、数学证明等复杂任务中的表现。文章还提供了验证安装方法、使用示例和常见问题解答,帮助开发者解锁AI的深层思考能力。(149字)

weixin_43236925的博客 1908

Android——谷歌官方下拉刷新控件SwipeRefreshLayout

前言: 如今谷歌推出了更官方的下拉刷新控件, 这无疑是对安卓开发人员来说是个好消息,很方便的使用这个SwipeRefreshLayout控件实现下拉刷新功能。Android4.0以下的版本需要用到 android-support-v4.jar包才能用到 android-support-v4.jar 包下载地址:http://download.csdn.net/detail/h7870181/7

七号座先生的博客 6101

亿佰特E77模块(STM32WLE5CCU6)LoRa通信实战指南:从配置到应用开发

本文详细介绍了亿佰特E77模块(STM32WLE5CCU6)的LoRa通信实战指南,从硬件配置到应用开发。基于ARM Cortex-M4内核的E77模块集成了LoRa射频前端,具备超低功耗和硬件级抗干扰特性,适用于智能农业、工业现场等场景。文章提供了开发环境搭建、LoRa参数配置、实战通信及性能优化等实用技巧,帮助开发者快速掌握LoRa通信技术。

weixin_29164185的博客 761

关于Android Studio下拉刷新控件SwipeRefreshLayout

在代码界混了一年半载的人估计或多或少都接触过所谓的下拉刷新和上拉加载,今天写这篇博客只是想记录一下自己的一些想法。 **XlistView**这是我最先接触的关于下拉刷新和上拉加载的一个控件,这个就留着下次再贴吧,今天主要讲的是SwipeRefreshLayout这个东东,而且相对来说比较简单容易上手。 首先你得在Layout文件夹的activity_main.xml布局文件下添加以下代码:<?xm

总之岁月漫长,然而值得等待。 9888

YOLOv11改进 | 主干/Backbone篇 | 利用目标检测轻量化网络MobileNetV2替换Backbone(yolov11系列全系轻量化)

本文给大家带来的改进机制是,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。其在MobilNetV1的基础上采用反转残差结构和线性瓶颈层。这种结构通过轻量级的深度卷积和线性卷积过滤特征,同时去除狭窄层中的非线性,以维持表征能力。MobileNetV2在性能上和精度上都要比V1版本强很多,其在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中都展现了一定的有效性。YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍二、MobileNetV2的框架原理。

Snu77的博客 2844

Altium Designer应用技巧5: Altium Live账号的获得

为了更好的应用Altium Designer,我们需要得到一个Altium Live账号,但从其英文或者中文官方网站取得,都需要7个工作日的时间,而且对于个人用户来说,并不是100%都能够获取到。本文介绍一种,从俄罗斯Altium官方网站获取账号的方法,可以立即使用。     1、点击http://live.altium-ru.com/#Join网址进入俄罗斯Altium官方网站,Altiu

snmplink的博客 1万+

chrome地址栏下拉框插件

终于找到在chrome(google浏览器 谷歌浏览器)中用的地址栏下拉框插件。 https://chrome.google.com/webstore/detail/logbmehmiacemkimbpcbjgaikobdndah

中国资深步行专家 1663

【DeepSeek-R1 】分词系统架构解析

DeepSeek-R1 分词系统解析 DeepSeek-R1 采用 SentencePiece Unigram 算法,通过统计语言模型实现高效子词分词。其核心优势包括: 算法对比:相比 BPE/WordPiece,Unigram 基于概率模型,支持多语言,自动回退字符级处理。 特性优化:智能空格处理、数字分桶、多语言统一支持,并采用前缀树索引和 SIMD 并行加速,编码速度达 12,458 tok/s。

赶紧的博客 429

Android自定义View学习一---基础

Android自定义View学习一 自定义view三点: 布局 绘制 触摸反馈 基础 坐标系 参考: 安卓自定义View基础-坐标系 View的坐标系 注意:View的坐标系统是相对于父控件而言的. getTop(); //获取子View左上角距父View顶部的距离 getLeft(); //获取子View左上角距父View左侧的距离 getBottom(); ...

了凡 1146

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

自定义view的学习

学习如何自定义view

uniquemei的博客 335

STM32F407中文手册

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

自定义view学习文章

自定义view是每一个初级程序员都比较头疼的问题,给大家推荐学习自定义view的文章,文章地址:http://blog.csdn.net/harvic880925/article/details/50995268

ytyxl的博客 223

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

从零开始学习自定义view【0】View是什么

在Android中,View是界面上所有用户可见元素的基础类,包括TextView、Button、ImageView等。它们都是View类的子类,并且具有View的所有特性和功能。通俗来讲,我们经常用button来设置onClick事件,难道就不可以用TextView来设置onClick事件吗?因为他们本质上都是view,继承自view。所以我们自定义view的话,也可以直接设置它的onClick事件哦,前提是自定义的view最终继承的是Android View类。

jiet_h的博客 379

自定义View学习记录 plinko游戏View

在res的value中的attrs.xml中添加如下属性。1.创建自定义View属性。2.创建自定义View。

m0_50774720的博客 337

Android自定义View学习

主要学习 (1)郭霖的:带你一步步深入了解View (2)谷歌小弟的,自定义View (3)任玉刚的,自定义View。 来自慕课网的《Android面试解密-自定义View》 测量模式:EXACTLY表示固定的值,AT_MOST表示由自身决定,并且至多不能超过父控件的,UNSPECIFIED表示没有限制(用于ListView等)。 测量值: 当需要重新测量时,...

gs344937933的专栏 544

自定义View学习记录之 翻页View

多个该控件组合起来可实现 翻页时钟(FlipFlow时钟)、倒计时 等等效果,支持的自定义效果:背景色、背景圆角 、上下页间距、展示字体大小、颜色、翻动页背景等等

m0_50774720的博客 236

Android自定义View学习二---流程

Android自定义View学习二 参考: 安卓自定义View进阶-分类与流程 自定义View绘制流程函数调用链(简化版) 构造函数 构造函数有四种重载: //一般在直接New一个View的时候调用 public void SloopView(Context context) {} //一般在layout文件中使用的时候会调用,关于它的所有属性(包括自定义属性)都会包含在attrs中传递进来...

了凡 404

Android自定义View学习总结

Android自定义View的学习总结

2301_80329517的博客 948

Android自定义view学习笔记02

Android自定义view学习笔记02 本文代码来自于张鸿洋老师的博客之Android 自定义View (二) 进阶 学习笔记,对代码进行些许修改,并补充一些在coding过程中遇到的问题、学习的新东西。 相关代码//CustomImageView.java package mmrx.com.myuserdefinedview.textview;import android.content.C

mmrx的博客 6509

Android控件:自定义View学习资源汇总

最近在学习自定义View,按照自己的理解简单罗列下一些学习资源,循序渐进。准备篇自定义View必须学习的两大主题,分别时View/ViewGroup的绘制流程,以及View/ViewGroup的事件分发流程。 绘制流程 Android视图绘制流程完全解析,带你一步步深入了解View(二) Android View系统解析(下) Android:View绘制流程 事件分发 Android事件分

leelit笔记本 3127
上一篇: RadioButton+Fragment实现Tab切换
下一篇: Android集成推送
尘彦
博客等级 码龄11年 92粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值