正在上传…重新上传取消​ 拉大锯 发表于  2019-11-03 17:36  3435

自定控件 view viewGroup android 安卓

Android自定控件的步骤

为什么自定义控件要步骤化呢?因为很多新手同学,根据产品的要求做一些控件时,无从下手。

有了步骤以后,就可以按套路走了,再也不用害怕了。

判断控件类型

首先我们要判断这个控件是属于自定义控件里的哪种类型,如果不知道分类的话,同学们可以看这篇文章

自定义控件分类

获取相关的属性

其实这玩意在自定义控件里叫自定义属性。什么是属性呢?

来我们看,android控件原有的属性:

比如说我们的LinearLayout

 <LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="41px"android:orientation="horizontal">
</LinearLayout>

这里面的属性就有origintation,layout_width,layout_height.... 而origintation是LinearLayout特有的,而其他的则是View都有的

那么我们在写自己的控件时,有些值,也是通过xml里的属性进行配置的,所以我们要有自定义属性。

自定义控件里如何自定义属性呢?

自定义属性步骤:

  1. 声明属性

在attrs.xml里进行声明,其实都行,都是resourse,举例:

    <declare-styleable name="RoundImage_Style"><attr name="radius" format="dimension" /><attr name="showBorder" format="boolean" /><attr name="borderWidth" format="dimension" /></declare-styleable>
  1. 使用属性
    <com.sunofbeaches.calendarproviderdemo.RoundImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"sob:borderWidth="5dp"sob:radius="4dp"sob:showBorder="true" />
  1. 获取属性值
public class RoundImageView extends AppCompatImageView {private static final String TAG = "RoundImageView";private float mRadius;private float mBorderWidth;private boolean mShowBorder;public RoundImageView(Context context) {this(context,null);}public RoundImageView(Context context,AttributeSet attrs) {this(context,attrs,0);}public RoundImageView(Context context,AttributeSet attrs,int defStyleAttr) {super(context,attrs,defStyleAttr);TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.RoundImage_Style);//一般默认值设置成常量mRadius = typedArray.getDimension(R.styleable.RoundImage_Style_radius,0);mBorderWidth = typedArray.getDimension(R.styleable.RoundImage_Style_borderWidth,0);mShowBorder = typedArray.getBoolean(R.styleable.RoundImage_Style_showBorder,false);Log.d(TAG,"mRadius -- > " + mRadius);Log.d(TAG,"mBorderWidth -- > " + mBorderWidth);Log.d(TAG,"mShowBorder -- > " + mShowBorder);typedArray.recycle();}
}

运行结果:

 D/RoundImageView: mRadius -- > 12.0D/RoundImageView: mBorderWidth -- > 15.0D/RoundImageView: mShowBorder -- > true

测量

测量是重点要掌握的,如果是ViewGroup则测量自己(设置自己大小,因为ViewGroup也可以是子view呀)跟设置期望孩子的大小。

如果是View则需要测量自己(设置自己大小)

这两个参数要理解

处理事件

一般来说,除了简单的展示性控件,多数控件都要处理事件的。比如说我们上一篇文章的例子:

这是一个ViewGropu,要处理触摸事件吧!当事件触发时,则要重新布局,改变其位置。

数据更新

数据更新以后,UI也要重新布局,而View则需要重新绘制。

后面呢,我们就根据这个图去走流程,编写一些案例,几个例子下来,相信同学们就可以自己动手去写控件了。

先是模仿,再是去实现自己的想法。

自定义控件的本质

    xmlns:sob="https://schemas.android.com/apk/res-auto"

Android自定义控件的步骤相关推荐

  1. android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...

    转载:http://blog.csdn.net/xiabing082/article/details/48781489 1.  大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...

  2. android里的editText怎么用,Android自定义控件EditText使用详解

    本文实例为大家分享了Android自定义控件EditText的具体代码,供大家参考,具体内容如下 自定义控件分三种: 1. 自绘控件 2. 组合控件 3. 继承控件 代码已上传到 github 以后的 ...

  3. Android 自定义控件打造史上最简单的侧滑菜单

    侧滑菜单在很多应用中都会见到,最近QQ5.0侧滑还玩了点花样~~对于侧滑菜单,一般大家都会自定义ViewGroup,然后隐藏菜单栏,当手指滑动时,通过Scroller或者不断的改变leftMargin ...

  4. Android自定义控件系列二:自定义开关按钮(一)

    这一次我们将会实现一个完整纯粹的自定义控件,而不是像之前的组合控件一样,拿系统的控件来实现:计划分为三部分:自定义控件的基本部分,自定义控件的触摸事件的处理和自定义控件的自定义属性: 下面就开始第一部 ...

  5. Android自定义控件系列二:自定义开关按钮

    这一次我们将会实现一个完整纯粹的自定义控件,而不是像之前的组合控件一样,拿系统的控件来实现:计划分为三部分:自定义控件的基本部分,自定义控件的触摸事件的处理和自定义控件的自定义属性: 下面就开始第一部 ...

  6. Android自定义控件(四)——望远镜效果实现

    通常在两种情况下人们会思变求新:一种是希望摆脱危机,另一种只是单纯地想要一些新鲜的改变,没有什么特别迫切的需要.在前者,发出期盼的人即不幸福也不富足,而后者幸福而富裕.(不明之事乃命运之域,确定之事乃 ...

  7. Android自定义控件开发系列(零)——基础原理篇

    在后边的文章中发现在说Android自定义时,有时候要重复解释很多东西,所以想想返回来增加一篇"基础原理篇",直接进入正题吧-- 首先的问题是:在Android项目开发中,什么时候 ...

  8. Android自定义控件-彩虹条进度条

    在Android手机中我们经常可以看到类似于彩虹条的进度条,尤其是在显示下载进度的时候,一般都会使用彩虹条的形式表示下载进度,下面就来讲解这种彩虹条是如何实现的: 1.首先我们先来看一下彩虹条的效果图 ...

  9. android 自定义时钟,Android自定义控件之圆形时钟(续)

    在上篇文章中,我向大家介绍了如何通过自定义View一步步画出一个漂亮的圆形时钟.如果你还没看的话,我不建议你接着往下看,因为这篇文章是接着上篇的文章,如果直接看的话可能会不知所云,所以还是建议你先看一 ...

  10. 《Android自定义控件》时钟、钟表AlarmClockView,仿华为手机世界时钟控件效果

    转载请标明出处:https://blog.csdn.net/m0_38074457/article/details/85790550,本文出自[陈少华的博客] 一.效果图 二.控件结构 三.代码实现 ...

最新文章

  1. python中嵌套循环的运行原理_python中while嵌套循环的执行流程问题?
  2. 如何在服务器端写关闭窗口的代码?同时能够更新父窗口?
  3. AI:2021年WAIC世界人工智能大会2021年7月9日《可信AI论坛》、《AI引领探索保险科技新价值》、《产研共育·数智未来》等论坛演讲内容分享及解读
  4. C# 容器重用避免GC 的论证
  5. python2:function
  6. VTK:等参细胞演示用法实战
  7. PHP的global与GLOBAL
  8. mysql 里面不等于符号_mysql 不等于 符号写法
  9. linux的常用操作——read函数和write函数
  10. 《Java 7 并发编程指南》学习概要 (3)Semaphore, CountDownLatch, CyclicBarrier , Phaser, Exchanger...
  11. 卷积法求解系统的零状态响应_信号与系统复习(2013.6)
  12. 概率论基础-严士健 第二版 习题与补充2.4答案
  13. Unity 移动的几种方法(从某一点移动到另外一点)
  14. 语音机器人在人工智能领域的发展
  15. 建站百科|网站Banner风格、样式大解析
  16. SAP FICO 解析成本要素类别
  17. 腾讯推页游平台’”页游乐园”YY.QQ.com
  18. 2022刘润年度演讲:进化的力量关键词
  19. 站长收入差距逐渐拉开 高收入站长稳步增加
  20. 解决win10下安装typescript后仍报“tsc不是内部或外部命令...”的问题

热门文章

  1. 用收敛标准计算神经网络迭代次数
  2. 【Java面试题】java程序员面试宝典答案
  3. 20220925 appreciate和grateful的区别
  4. php cpu主频,处理器主频概念及 xxxGHz 的运算速度
  5. 乐鑫ESP32-S3双核处理器,专为 AIoT 市场打造
  6. shell脚本从基础到实战(全网最详细)监控、加减乘除、购票、批量创建与删除用户等脚本
  7. 什么是bcd码数据传输通讯_数据传输 数据通讯
  8. ubuntu开机密码破解
  9. SpringMVC入门运行成功的实例(一)
  10. 计算机不能关机处理方法,电脑无法关机的解决办法