• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android自定义控件(二),android自定义控件

Android自定义控件(二),android自定义控件

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 自定义控件,android中自定义控件,android自绘控件,android 自定控件,android 动态添加控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android自定义控件(二),android自定义控件


这一篇主要来讲一下自定义控件中的自定义viewgroup,我们以项目中最常用的下拉刷新和加载更多组件为例

简单介绍一下自定义viewgroup时应该怎么做。

分析:下拉刷新和加载更多的原理和步骤

自定义一个viewgroup,将headerview、contentview和footerview从上到下依次布局,然后在初始化的时候

通过Scrooller滚动使得该组件在y轴方向上滚动headerview的高度,这样headerview就被隐藏了。而contentview的

宽度和高度都是match_parent的,因此屏幕上 headerview和footerview就都被隐藏在屏幕之外了。当contentview被

滚动到顶部,如果此时用户继续下拉,那么下拉刷新组件将拦截触摸事件,然后根据用户的触摸事件获取到手指滑动的

y轴距离,并通过scroller将该下拉组件在y轴上滚动手指滑动的距离,实现headerview的显示和隐藏,从而达到下拉的效果

。当用户滑动到最底部时会触发加载更多的操作,此时会通过scroller滚动该下拉刷新组件,将footerview显示出来,实现加载更多

的效果。具体步骤如下:

第一步:初始化View即headerView contentView和footerView
第二步:测量三个view的大小,并计算出viewgroup的大小
第三步:布局,将三个view在界面上布局,按照上中下的顺序
第四步:监听屏幕的触摸事件,判断是否下拉刷新或者加载更多
第五步:触发下拉刷新和加载更多事件执行下拉刷新和加载更多
第六步:下拉刷新和加载更多执行完后的重置操作

示例代码:

自定义的viewgroup

  1 package com.jiao.simpleimageview.view;
  2 
  3 import android.content.Context;
  4 import android.graphics.Color;
  5 import android.support.v4.view.MotionEventCompat;
  6 import android.util.AttributeSet;
  7 import android.view.LayoutInflater;
  8 import android.view.MotionEvent;
  9 import android.view.View;
 10 import android.view.ViewGroup;
 11 import android.view.animation.RotateAnimation;
 12 import android.widget.AbsListView;
 13 import android.widget.AbsListView.OnScrollListener;
 14 import android.widget.ImageView;
 15 import android.widget.ProgressBar;
 16 import android.widget.Scroller;
 17 import android.widget.TextView;
 18 
 19 import com.jiao.simpleimageview.R;
 20 import com.jiao.simpleimageview.listener.OnLoadListener;
 21 import com.jiao.simpleimageview.listener.OnRefreshListener;
 22 
 23 import java.text.SimpleDateFormat;
 24 import java.util.Date;
 25 
 26 /**
 27  * Created by jiaocg on 2016/3/24.
 28  */
 29 public abstract class RefreshLayoutBase<T extends View> extends ViewGroup implements
 30         OnScrollListener {
 31 
 32     /**
 33      *
 34      */
 35     protected Scroller mScroller;
 36 
 37     /**
 38      * 下拉刷新时显示的header view
 39      */
 40     protected View mHeaderView;
 41 
 42     /**
 43      * 上拉加载更多时显示的footer view
 44      */
 45     protected View mFooterView;
 46 
 47     /**
 48      * 本次触摸滑动y坐标上的偏移量
 49      */
 50     protected int mYOffset;
 51 
 52     /**
 53      * 内容视图, 即用户触摸导致下拉刷新、上拉加载的主视图. 比如ListView, GridView等.
 54      */
 55     protected T mContentView;
 56 
 57     /**
 58      * 最初的滚动位置.第一次布局时滚动header的高度的距离
 59      */
 60     protected int mInitScrollY = 0;
 61     /**
 62      * 最后一次触摸事件的y轴坐标
 63      */
 64     protected int mLastY = 0;
 65 
 66     /**
 67      * 空闲状态
 68      */
 69     public static final int STATUS_IDLE = 0;
 70 
 71     /**
 72      * 下拉或者上拉状态, 还没有到达可刷新的状态
 73      */
 74     public static final int STATUS_PULL_TO_REFRESH = 1;
 75 
 76     /**
 77      * 下拉或者上拉状态
 78      */
 79     public static final int STATUS_RELEASE_TO_REFRESH = 2;
 80     /**
 81      * 刷新中
 82      */
 83     public static final int STATUS_REFRESHING = 3;
 84 
 85     /**
 86      * LOADING中
 87      */
 88     public static final int STATUS_LOADING = 4;
 89 
 90     /**
 91      * 当前状态
 92      */
 93     protected int mCurrentStatus = STATUS_IDLE;
 94 
 95     /**
 96      * header中的箭头图标
 97      */
 98     private ImageView mArrowImageView;
 99     /**
100      * 箭头是否向上
101      */
102     private boolean isArrowUp;
103     /**
104      * header 中的文本标签
105      */
106     private TextView mTipsTextView;
107     /**
108      * header中的时间标签
109      */
110     private TextView mTimeTextView;
111     /**
112      * header中的进度条
113      */
114     private P



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 自定义控件详解(四):Paint 画笔路径效果,paint画笔
  • 自定义控件详解(五):onMeasure()、onLayout(),onmeasureonlayout
  • 自定义控件详解(二):Path类 相关用法,详解path
  • 自定义控件详解(一):Paint类与Canvas类,paintcanvas
  • Android中的自定义控件(二),android自定义控件
  • 自定义控件(一),自定义控件(
  • 自定义数字加减控件,自定义数字控件
  • 自定义控件——开关按钮ToggleButton,控件togglebutton
  • Android 自定义分层级筛选控件
  • Android自定义控件系列案例【四】

相关文章

  • 2017-05-26Android Studio创建/打开项目时一直处于Building“project name”Gradle project info的解决办法,androidgradle
  • 2017-05-26上传单个文件到多台机器工具
  • 2017-05-26Android:让WebView支持&lt;input type=”file”…&gt;元素,androidwebview
  • 2017-05-26ionic 配置环境变量及创建新项目,ionic新项目
  • 2017-05-26自定义控件详解(五):onMeasure()、onLayout(),onmeasureonlayout
  • 2017-05-26Android React-Native系列之(一)零基础搭建React-Native开发环境
  • 2017-05-26Kotlin怎样使用Android的Dagger2,kotlindagger2
  • 2017-05-26安卓第十八天笔记--简单动画,安卓第十八天--
  • 2017-05-26Android 手机卫士--绑定sim卡序列号,androidsim
  • 2017-05-26自动化运维之cobbler批量部署操作系统(一)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Linux内核系列—操作系统开发之进入32位保护模式,linux保护模式
    • 类似微信朋友圈,点击+号图片,可以加图片,信朋友圈
    • 使用Chrome远程调试GenyMotion上的WebView程序,genymotionwebview
    • Android设计模式之单例模式的七种写法
    • okhttp3.4.1+retrofit2.1.0实现离线缓存,retrofitokhttp缓存
    • 通过redhat crash utility从ramdump中获取ftrace log
    • Android中的沉浸式状态栏效果,android沉浸状态栏
    • framework层和native层实现联网控制(iptable方式),nativeiptable
    • msm8909+android5.1.1 由BLSP3改为BLSP1后SPI读写速度慢问题解决
    • Android之ViewPager 第二课,androidviewpager

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有