什么叫深度呢?这个是我个人理解。记录下学习的内容!
一般的自定义view的方式与步骤 http://blog.csdn.net/u012138137/article/details/49096307 (这个是我以前写的另外一篇文章)。
现在开始来讲实用性更强的自定义:
其实也就依照android系统自己view的实现方式来实现自己想要的view,在慕课网有介绍(我也就是概括下)。
1、设计自己需要的属性:这个在values目录下新建一个attrs.xml文件(如果没有的话)。然后在里面定义declare-styleable元素如下。

<resources><declare-styleable name="AmountView"><!-- 左右2边+-按钮的宽度 --><attr name="btnWidth" format="dimension" /><!-- 中间TextView的宽度 --><attr name="tvWidth" format="dimension" /><!--<attr name="tvColor" format="color"/>--><attr name="tvTextSize" format="dimension"/><attr name="btnTextSize" format="dimension"/></declare-styleable>
</resources>

通过后面的format来确定该属性是什么类型值。
2、也是需要实现一个自己的View。通过继承Relativelayout布局。然后在带属性的构造方法中实现定义的属性跟上面1中写好的属性进行绑定(这个是重点) 1->。

TypedArray obtainStyledAttributes = getContext().obtainStyledAttributes(attrs, R.styleable.AmountView);int btnWidth = obtainStyledAttributes.getDimensionPixelSize(R.styleable.AmountView_btnWidth, LayoutParams.WRAP_CONTENT);int tvWidth = obtainStyledAttributes.getDimensionPixelSize(R.styleable.AmountView_tvWidth, 80);int tvTextSize = obtainStyledAttributes.getDimensionPixelSize(R.styleable.AmountView_tvTextSize, 0);int btnTextSize = obtainStyledAttributes.getDimensionPixelSize(R.styleable.AmountView_btnTextSize, 0);obtainStyledAttributes.recycle();

先来说明下这段代码的意思,通过上下文来获得刚才在attrs.xml下设置的属性,返回的TypedArray类型对象值是指attrs里名为AmountView的所有内容映射。
下面的方法就是通过对应attrs中format设置的格式来获取值的,第一个参数就是对应的属性了,第二个参数为默认值。最后要记得回收下资源,这个是避免浪费资源以及一些可能碰到缓存引起的问题。
2->通过new出控件来动态设置参数,如:btn.setWidth(btnWidth);这里的btnWidth就是上面获取的尺寸。当然还可以再设置Gravity等属性。
3->通过LayoutParams btnParamas = new LayoutParams(btnWidth,LayoutParams.MATCH_PARENT);
以及btnParams.addRule(Relativelayout.ALIGN_PARENT_LIFT,TRUE);来设置该按钮控件在布局的大小以及相应位置。
4->通过addView();方法把按钮对象以及参数对象传进去实现真正添加到ViewGroup中:addView(btn,btnParams);
3、在项目中需要用到的xml文件中添加该控件,添加方式一样是包名+类名。不过这个控件可以用到自己定义的属性,前提得在最外层的布局中添加自动引用xml文件方式,类似java的Import导包一样功能效果,xmlns理解为xml文件的namespace的缩写。 xmlns:app="http://schemas.android.com/apk/res-auto"

 <com.hiwhitley.demo.AmountViewandroid:id="@+id/amount_view"android:layout_width="wrap_content"android:layout_height="36dp"android:layout_centerInParent="true"android:layout_gravity="right"android:layout_marginRight="15dp"app:btnTextSize="14sp"app:btnWidth="36dp"app:tvWidth="50dp"/>

这最后三个属性就是引用自己定义的属性。

4、实现定义View中按钮的点击事件(模拟android系统的点击事件—接口回调)在自定义View类中实现:
①先定义一个接口并声明接口内需要实现的方法 :

public interface OnAmountChangeListener {void onAmountChange(View view, int amount);}

②声明接口对象: private OnAmountChangeListener mListener;
③暴露一个方法,把接口作为参数传递到实现的方法并初始化接口对象:

public void setOnAmountChangeListener(OnAmountChangeListener onAmountChangeListener) {this.mListener = onAmountChangeListener;}

④在MainActivity中调用改方法:

mAmountView.setOnAmountChangeListener(new AmountView.OnAmountChangeListener() {@Overridepublic void onAmountChange(View view, int amount) {Toast.makeText(getApplicationContext(), "Amount=>  " + amount, Toast.LENGTH_SHORT).show();}});

自此自定义点击事件已完成。
<————————————————————————————————–>
另外我们还可以在自定义控件中写一些方法,比如是否隐藏按钮

public void isValide(boolean b){if(b){btn.setVisibility(View.VSIBLE);}else{btn.setVisibility(View.GONE);}
};

然后在MainActivity中调用mAmountView.isValide(true);

《——————-记录完结————————》

android 深度自定义View相关推荐

  1. android 动态画直线,Android使用自定义view在指定时间内匀速画一条直线的实例代码...

    本文讲述了Android使用自定义view在指定时间内匀速画一条直线的实例代码.分享给大家供大家参考,具体如下: 1.效果图: 2.自定义view实现 public class UniformLine ...

  2. Android 系统(264)---android进阶——自定义View

    android进阶--自定义View 软件架构 01.自定义View简介 - onMeasure,onDraw,自定义属性  https://www.jianshu.com/p/48944aad200 ...

  3. android 动态生成直线,Android使用自定义view在指定时间内匀速画一条直线的实例代码...

    本文讲述了Android使用自定义view在指定时间内匀速画一条直线的实例代码.分享给大家供大家参考,具体如下: 1.效果图: 2.自定义view实现 public class UniformLine ...

  4. android五子棋编程教程全集,android简单自定义View实现五子棋

    本文实例为大家分享了android自定义View实现五子棋的具体代码,供大家参考,具体内容如下 先说一下吧,android的自定义View就是自己实现一个类去继承View,实现其中的方法,这里面我最感 ...

  5. Android 中自定义View 裁剪扇形图片

    Android 中自定义View 裁剪扇形图片 当需要裁剪图片为扇形区域时,使用Canvas.clipPath(path)方法可以裁剪为扇形区域 ps:此方法会导致绘制图片边缘有锯齿,暂无解决方法(知 ...

  6. 【Android】自定义View、画家(画布)Canvas与画笔Paint的应用——画图、涂鸦板app的实现

    利用一个简单的画图app来说明安卓的图形处理类与自定义View的应用. 如下图,有一个供用户自己任意画图.涂鸦的app, 这里不做那么花俏了,仅提供黑白两色,但可以改变笔尖的粗细. 实质上这里的橡皮擦 ...

  7. android开发自定义View(三)仿芝麻信用积分

    此文参考了https://github.com/HotBitmapGG/CreditSesameRingView 感谢作者的分享!! 首先看一下支付宝上显示的样子 然后看一下模仿的效果 代码 基础部分 ...

  8. Android 高级自定义View实战

    2019独角兽企业重金招聘Python工程师标准>>> 在android组件中主要分为两种:容器(LinearLayout....)和子View(TextView......),但是 ...

  9. Android之自定义View以及画一个时钟

    https://www.2cto.com/kf/201509/443112.html 概述: 当Android自带的View满足不了开发者时,自定义View就发挥了很好的作用. 建立一个自定义View ...

最新文章

  1. java推送技术_java网络编程 - java服务器推送技术系列方案实战
  2. python asp.net requests_python3使用requests访问asp页面时出错,返回500
  3. css H5端多行文本实现省略号
  4. “References to generic type List should be parameterized”
  5. uni-app 微信小程序使用 web-view 预览PDF
  6. 被LTRIM(RTRIM())害死了,差点
  7. 开放华为30年研发能力与实践 助力DevOps真正落地
  8. 数博会重磅活动:第一届大数据科学与工程国际会议日程
  9. 企业资源计划软件 业务知识点汇编整理
  10. 方舟编译器的安装和编译Helloword
  11. 不相交轮换的乘积怎么求_浅谈两种求条件极值的方法
  12. 使用Nacos配置中心云端化本地application.properties
  13. HDU - 4780费用流
  14. H3C路由器Hub-Spoke网络结构D×××配置案例(试读连载一二)
  15. 搭建个人网站(免备案)
  16. 数字经济与数字化转型
  17. 斗破苍穹里的那些女人
  18. live555 官方网站源码下载地址
  19. 精短高效的XML解析器,纯C单一程序,应用于银行的国税库行横向联网接口系统中,稳定可靠,运行速度飞快
  20. java 输入出生年月_java代码实现输入你出生年月日,计算到今天已经度过了多少天...

热门文章

  1. Java实现回文数四种方法
  2. Coursera | Introduction to Data Science in Python(University of Michigan)| Assignment1
  3. 6 个设计准则让图表焕然一新,数据可视化并不难!
  4. TCP FIN_WAIT1状态的实验和验收
  5. 黑帽seo收徒之 微信视频号创作 变现
  6. 全景拼接python旗舰版
  7. 回文串问题的克星——Palindrome Tree(回文树)/Palindrome Automaton(回文自动机)学习小记
  8. 4.1 数据结构——串
  9. 果然是WIFI引起局域网速度慢
  10. 大数据学习路线图(转载)