android 自定义控件(持续更新)
来源:互联网 发布:视频动态截图软件 编辑:程序博客网 时间:2024/05/16 07:56
自定义控件分为两种
- 1组合控件:将系统原生控件组合起来加上动画效果,形成一种特殊的动画效果。
- 2完全自定义控件,继承自系统的View,自己去实现View效果
RotateAnimation
- 构造函数参数含义
- fromDegrees
从哪个角度开始旋转 - toDegrees
到哪个角度结束 - pivotXType
X轴以什么为参考 - pivotXValue
x轴以哪里为中心,是一个0~1的浮点数 - pivotYType
Y轴以什么为参考 - pivotYValue
y轴以哪里为中心,是一个0~1的浮点数
- fromDegrees
如何在动画完成后保持状态
animation.setFillAfter(true);
设置动画持续时间
animation.setDuration(1000); //持续1s
还可以给动画添加监听事件
animation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } });
添加动画时可能出现的bug
- 动画完成后已经消失的view,点击原位置还会触发点击事件,这是由于Android原生动画执行后view的位置不发生改变,所以如果想解决此bug就要在view消失的时候禁用,例如 button.setEnabled(false);
如何获取物理按键的点击事件
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_MENU){ //然后做自己的处理 return true; //return true代表我们自己处理这个响应 } return super.onKeyDown(keyCode, event);}
下拉列表(和QQ登陆那个一点用户名出现用户列表一样)
使用PopupWindow作为弹窗
我们一般使用三个参数的构造函数
PopupWindow popupWindow = new PopupWindow(View contentView, int width, int height);
参数含义
- contentView :代表我们想让它显示的view
- width : 弹窗的宽
- height : 弹窗的高
显示popupWindow
popupWindow.showAsDropDown(View anchor,int xoff, int yoff);
参数含义
- anchor : 代表在这个控件下面显示
- xoff : 在x轴上的偏移量
- yoff : 在y轴上的偏移量
去除listView的滚动条
当我们不想要listView的滚动条时我们可以这样做
listView.setVerticalScrollBarEnabled(false);
焦点问题
假如listView的item中含有button,imageButton,checkBox等会强制获取焦点的view,此时listView无法获取焦点,因此无法被点击。
解决方法:给item的根布局增加以下属性
android:descendantFocusability=”blocksDescendants”当popupWindow中填充的View是ListView的话,如果不做设置,listView是无法获取焦点,所以也就无法响应点击事件,所以我们应该做如下设置
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.setOutsideTouchable(true);
动态改变popupWindow的宽高
假设popupWindow的高为300像素,当里面listView总的条目高小于300像素时,我们让popupWindow的高等于listView总条目的高
//这里的view代表当前listView的条目,list.size()是listView的条目数int listHeight = view.getHeight() * list.size();popupWindow.update(editText.getWidth(), listHeight < 300 ? listHeight : 300);
滑动开关
自定义控件步骤:
- 测量:onMeasure 设置自己显示在屏幕上的宽高
- 布局:onLayout 设置自己显示在屏幕上的位置(只有在自定义ViewGroup中才用到)
- 绘制:onDraw 控制显示在屏幕上的样子(自定义viewgroup时不需要这个)
View和ViewGroup的区别
1.他们都需要进行测量操作
2.ViewGroup主要是控制子view如何摆放,所以必须实现onLayout
View没有子view,所以不需要onLayout方法,但是必须实现onDraw
0 0
- android 自定义控件(持续更新)
- Android自定义加载动画(持续更新中...)
- Android特效(持续更新)
- Android UI (持续更新)
- Android特效(持续更新)
- Android特效(持续更新)
- Android 适配 (持续更新)
- android大道理(持续更新)
- extjs 各种控件组合(持续更新......)
- ios基本控件详解(持续更新)
- WPF控件常用属性(持续更新)
- JS 自定义代码库(持续更新)
- echarts自定义配置(持续更新)
- android上不错的开源库及控件(持续更新)
- android调试问题解决(持续更新ing)
- Android 4.4特性说明(持续更新)
- android FragMent 错误汇总 (持续更新)
- android小知识(持续更新)
- MySQL: Change root password in Mac
- 学霸,学渣,还是血神???微笑
- 18-mysql优化之索引的增删改以及优化
- Samsung 笔记本安装Win7方法
- 重载
- android 自定义控件(持续更新)
- php
- 动态规划-求二项式系数
- 续 Codeforces 596 C Wilbur and Points
- 条件变量 condition variable
- 文章标题
- 6、面向对象
- java.lang.NoClassDefFoundError: org/eclipse/jetty/util/thread/QueuedThreadPool$1
- Python数据类型-序列(元组)