`
qq986945193
  • 浏览: 89688 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

android开发之自定义View 详解 资料整理 小冰原创整理,原创作品。

 
阅读更多
/** * 作者:David Zheng on 2015/11/7 15:38 * *
网站:http://www.93sec.cc * *
微博:http://weibo.com/mcxiaobing * *
微博:http://weibo.com/93sec.cc */ 个人交流QQ986945193

前言
  • 课程介绍
    • 自定义控件在android相当重要。要求:大家熟悉自定义控件的原理,熟悉自定义控件的使用步骤。
      • 按类型划分,自定义View的实现方式可分为三种:自绘控件组合控件、以及继承控件
      • 如何让自定义的View在界面上显示出来? 只需要像使用普通的控件一样来使用自定义View就可以了。
    • 1,回顾系统的一些控件,Viewpager广告条的展示
    • 2,介绍View的绘制过程
    • 3,自定义View:开关Button
    • 4,自定义属性
    • 5,组合控件:标题栏
    • 6,继承系统控件:ListView刷新加载的原理等
  • 系统控件
    • 心中要有一个View树

一,自定义View:
  • 概念:自绘控件的意思就是,这个View上所展现的内容全部都是自己绘制出来的。
  • 自绘控件的步骤:
    • 实现构造方法
    • onMeasure(int ,int)中调用onMeasureDimention() 进行测量
    • onDraw(Canvas)方法进行绘制View
    • 实现onTouchEvent(MotionEvent ev)方法,对touch事件进行解析
  • 一些API:
    • 绘制View主要是onDraw()方法中完成。通过参数Canvas来处理,相关的绘制主要有drawRect、drawLine、drawPath等等。
    • Canvas绘制的常用方法:
      1. drawColor() 填充颜色
      2. drawLine() 绘制线
      3. drawLines() 绘制线条
      4. drawOval() 绘制椭圆
      5. drawPaint() 画笔绘制
      6. drawPath() 绘制路径
      7. drawPicture() 绘制图片
      8. drawPoint() 绘制点
      9. drawPoints() 绘制点
      10. drawRGB() 填充颜色
      11. drawRect() 绘制矩形
      12. drawText() 绘制文本
      13. drawTextOnPath() 在路径上绘制文本
  • 2、刷新View:(刷新view的方法这里主要有:)
    • invalidate(int l,int t,int r,int b)
      • 刷新局部,四个参数分别为左、上、右、下
    • invalidate()
      • 整个view刷新。执行invalidate类的方法将会设置view为无效,最终重新调用onDraw()方法。
      • invalidate()是用来刷新View的,必须是在UI线程中进行工作。在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。
    • invalidate(Rect dirty)
      • 刷新一个矩形区域

二,组合控件
  • 概念:组合控件的意思就是,不需要自己去绘制视图上显示的内容,而只是用系统原生的控件就好了,但可以将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件。
  • 例如:标题栏就是个很常见的组合控件,很多界面的头部都会放置一个标题栏,标题栏上会有个返回按钮和标题,点击按钮后就可以返回到上一个界面。那么下面我们就来尝试去实现这样一个标题栏控件。

三,继承控件:
  • 概念:继承控件的意思就是,我们并不需要自己重头去实现一个控件,只需要去继承一个现有的控件,然后在这个控件上增加一些新的功能,就可以形成一个自定义的控件了。这种自定义控件的特点就是不仅能够按照我们的需求加入相应的功能,还可以保留原生控件的所有功能,比如 Android PowerImageView实现,可以播放动画的强大ImageView 就是一个典型的继承控件。

  • 例如:对ListView进行扩展,加入在ListView上滑动就可以显示出一个删除按钮,点击按钮就会删除相应数据的功能。或者刷新加载的ListView

一些重要的补充:
1,通用的布局,再抽出来一个布局,命名规则:layout开头。栗子:layout_title.xml ; 如何引用 : <include layout="@layout/layout_tilte" />


------------------------------------------------------华丽丽的分割线 - 咯咯咯--------------------------------------------------
功能案例

系统重要控件的展示:Viewpager
  • 步骤:
1,ViewPager的图片的展示
2,描述的联动
3,点的联动
4,无限循环的实现
5,自动播放,动画效果的实现


自定义开关按钮:
  • 步骤:
    • 1,自定义类继承自View
    • 2,重写onMeasure方法,设置View的大小
    • 3,重写onDraw方法,绘制View的内容
    • 4,重写onTouchEvent事件,对touch事件进行解析

自定义属性:
1.在attrs.xml文件中声明属性,
如:<declare-styleablename="MyToggleBtn"> //声名属性集的名称,即这些属性是属于哪个控件的。
<attrname="current_state"format="boolean"/> //声名属性current_state 格式为boolean类型
<attrname="slide_button"format="reference"/> //声名属性slide_button 格式为reference类型
</declare-styleable> 所有的format类型,详见注1:

2, 在布局文件中使用:在使用之前必须声名命名空间,
xmlns:zhaokeming="http://schemas.android.com/apk/res/com.zhaokeming.mytogglebtn"
说明:① xmlns是XMLnamespace的缩写; ② zhaokeming 可为任意写符 ③ http://schemas.android.com/apk/res/此为 android固定格式; ④com.zhaokeming.mytogglebtn此应用的包名,如manifest配置文件中一致。 布局文件:
<com.zhaokeming.mytogglebtn.MyToggleButton xmlns:heima="http://schemas.android.com/apk/res/com.zhaokeming.mytogglebtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
heima:slide_button="@drawable/slide_button"/>

3 ,在代码中对属性进行解析,主要代码:
TypedArrayta=context.obtainStyledAttributes(attrs,R.styleable.MyToggleBtn); //由attrs获得TypeArray
可以查看,View 自己定义的属性 怎么初始化的。。。

注1: format常用类型: reference 引用 color 颜色 boolean 布尔值 dimension 尺寸值 float 浮点值 integer 整型值 string 字符串 enum 枚举


组合控件-标题栏:
  • 重要的知识点:
    • 1,去掉标题: requestWindowFeature(Window.FEATURE_NO_TITLE); 必须在setContentView()方法执行前
    • 2,相同的布局,可以抽出来一个layout_xxx.xml 。 引用 <include layout="@layout/layout_xxx">
    • 3 ,定义相同控件的功能时,就可以抽出来一个 自定义组合控件
  • 步骤:
    • 1,继承一个layout_xxx.xml布局的最外面的 布局,比如 LinearLayout,RelativeLayout等等
    • 2, // inflate:把xml布局文件,转换成 View对象 ;把xml文件转换成的View对象,然后赋值给当前的类。 ;当前的类,就相当于View对象 ;通过调用这个View.inflate(mContext, R.layout.layout_xxx, this);
    • 3,把控件初始化,添加相应的功能

自定义ListView的刷新:
  • 步骤:
    • 1,
  • 注意事项
    • 1,
      • addHeaderView(View v) : 在ListView的头部,添加一个View ; 这个方法必须在 setAdapter()之前调用;
      • addFooterView(v): 在ListView的底部添加view
    • 2,
      • getHeight(): 在执行完onLayout()方法后,才会执行
      • getMeasuredHeight(); 在onMeasure()方法后,就执行;
        • 实现步骤:
        • mViewHeader.measure(0, 0);// 通知系统,执行测量工作
        • mHeaderHeight = mViewHeader.getMeasuredHeight(); // 获得测量的高度


/** * 作者:David Zheng on 2015/11/7 15:38 * *
网站:http://www.93sec.cc * *
微博:http://weibo.com/mcxiaobing * *
微博:http://weibo.com/93sec.cc */ 个人交流QQ986945193

分享到:
评论

相关推荐

    Android开发-自定义View-AndroidStudio(一)

    在我们从Android小学生 进阶到 Android中学生的路上,肯定需要经历 自定义View。 大神已经给出了,最精简的Demo,我这里 顺水推舟,把一些基础知识 标记在代码之中,各位可以一边看源码 一边学基础。 觉得文章有用,...

    Android-Android开发之自定义View的功能实现详解。教你一步一步学会自定义View

    在Android应用开发中,自定义View是提升用户体验和实现独特设计的重要手段。本文将深入探讨如何在Android中创建自定义View,以及实现其各种功能。首先,我们需要理解自定义View的基本概念,它允许开发者扩展系统提供...

    android 自定义view比较综合的例子

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面。这个“android 自定义view比较综合的例子”显然涵盖了多个高级话题,旨在帮助有一定基础的开发者提升自定义...

    Android自定义组件开发详解.docx

    【Android自定义组件开发详解】 Android自定义组件的开发是Android应用开发中的一个重要部分,它涉及到自定义View和ViewGroup的创建,以及对canvas和paint的深入理解和运用。自定义组件能够满足开发者对于UI设计的...

    android开发随声音大小变化的自定义view

    在Android开发中,创建一个能够随声音大小变化的自定义View是一种常见的需求,尤其是在音乐播放器或者音频相关的应用中。这个自定义View可以是长方形或圆柱形,旨在模仿音频波形或音量指示器的效果。下面我们将深入...

    Android 创建自定义View源码

    在Android开发中,创建自定义View是提升应用用户体验和实现独特设计的重要手段。自定义View允许开发者根据需求扩展系统默认的视图组件,或者构建完全原创的交互元素。本教程将深入探讨Android自定义View的源码实现...

    Android-Android自定义View有这些足够了

    在Android开发中,自定义View是一项重要的技能,它允许开发者创造出独特且富有创新性的用户界面。本文将深入探讨“Android-Android自定义View有这些足够了”这一主题,旨在帮助你掌握自定义Android View的核心技术,...

    Android自定义View实例:深度剖析 水晶/水滴 波浪球 实现步骤详解

    在Android开发中,自定义View是一项重要的技能,它允许开发者创造出独特且富有表现力的UI元素,提升用户体验。本文将深度剖析如何实现一个名为“水晶/水滴 波浪球”的自定义View,并通过详细步骤讲解,帮助你掌握...

    Android 自定义View视图

    在Android应用开发中,自定义View视图是一个重要的技术,它允许开发者根据特定需求创建独一无二的用户界面元素。本文将深入探讨如何通过继承View类来实现一个自定义的罗盘界面,以帮助开发者理解自定义视图的工作...

    Android开发-自定义View-AndroidStudio(二十六)数独(3)Dialog监听

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,提升应用的用户体验。本教程将聚焦于如何在Android Studio中实现一个自定义View,特别是涉及数独游戏的Dialog监听部分...

    Android音频剪辑裁剪自定义view

    在Android开发中,实现音频剪辑和裁剪功能通常涉及到多媒体处理、自定义视图以及用户交互设计。本文将深入探讨如何创建一个Android音频剪辑裁剪的自定义View,以便用户可以通过拖动来调整音频的剪切时长,并通过滑块...

    Android 使用Kotlin自定义View的方法教程

    随着google宣布kotlin作为官方开发语言,在Android中使用kotlin的趋势也越来越明显,最近被kotlin的文章轰炸了,所以决定上手试一下,试过之后,感觉靠它灵简直有魔性。特别是一句话写出一个复杂的循环的时候,简直...

    android 自定义view及自定义属性

    在Android开发中,自定义View和自定义属性是提升应用个性化和功能扩展性的重要手段。本文将深入探讨这两个核心概念,以及如何在实际项目中应用它们。 ### 自定义View 自定义View允许开发者创建自己的视图组件,以...

    android demo,自定义控件view,点击该自定义view,onclick随机生成数字

    在Android开发中,自定义控件(View)是提升应用个性化和功能多样性的重要手段。本Android Demo主要展示了如何创建一个自定义View,并实现点击事件(onClick)以随机生成数字的功能。下面将详细讲解这个过程中的关键...

    android自定义veiw——波浪线

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,提升应用的用户体验。本文将围绕“android自定义view——波浪线”这一主题,深入探讨如何实现这样的自定义组件。 首先...

    android 自定义view大全,非常好用

    在Android开发中,自定义View是一项重要的技能,它允许开发者创造出独特且富有交互性的用户界面。标题中的"android 自定义view大全,非常好用"表明这是一个集合了多种自定义View实现的资源,旨在帮助开发者掌握...

    android 自定义View界面大合集

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,以实现更加丰富和个性化的交互体验。"Android 自定义View界面大合集"的主题涵盖了这个领域的广泛知识点,包括但不限于...

    Android自定义View实现转盘旋转的效果

    Android 自定义 View 实现转盘旋转的效果 Android 的自定义 View 为开发者定义和使用个性化的 View 提供了很好的支持,想要使用自己定义的 View,需要继承 View 类,并重写构造函数和 onDraw() 函数。onDraw 函数...

    Android中自定义View

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,以实现更加丰富和个性化的交互体验。自定义View通常涉及到绘制、事件处理、动画以及性能优化等多个方面。下面我们将...

    Android自定义view——组合控件

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特的用户界面元素。本主题将深入探讨如何在Android中实现自定义组合控件,即利用多个基础控件构建一个具有特殊功能或样式的复合视图。...

Global site tag (gtag.js) - Google Analytics