android 输入框等控件的移动
2016-03-02 16:43
375 查看
在android的开发过程中难免有的时候需要的需求是,想要移动某些控件实现某些功能的同时,提高用户的体验
比如,携程中的查询地址的时候输入框的左右滑动效果,可能在看到这种效果的时候,挺多的人会想要通过动画的方式
进行实现,笔者也这么的尝试了,不过效果不理想,在用动画实现的时候还要控制,位移后,停止控件移动,控件的
实际的位置等问题,造成了挺多的问题。
以下是笔者的实现方式,供大家参考
笔者通过延迟执行+动态设置控件的位置进行实现
即 new Handler().postDelayed + view.setLayoutParams 实现的,以下是主要的代码
private void clickAnimation() {
final FrameLayout.LayoutParams layout = (LayoutParams) mClearEditText.getLayoutParams();//获取控件的布局对象
new Handler().postDelayed(new Runnable() {//通过1/1000秒的停顿
@Override
public void run() {
// TODO Auto-generated method stub
nowMarginLift = nowMarginLift - 4;//设置左margin的值
nowMarginRight = nowMarginRight + 4;//设置右margin的值
if (!mIsChangeView) {//判断是左移还是右移
layout.leftMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, nowMarginRight,getResources().getDisplayMetrics());
layout.rightMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, nowMarginLift,getResources().getDisplayMetrics());
} else {
layout.leftMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, nowMarginLift,getResources().getDisplayMetrics());
layout.rightMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, nowMarginRight,getResources().getDisplayMetrics());
}
mClearEditText.setLayoutParams(layout);//动态设置控件的位置
if (nowMarginRight != 40) {//判断是否已经位置到需要的位置
new Handler().postDelayed(this, 1);//没有到达位置继续位移
}else{
mIsChangeOver=true;//变更位置状态
}
}
}, 1);
}
其中 mClearEditText就是要移动的控件,而40就是要移动的距离,这样就实现了,控件的位置,并且不会
出现移动时的点击位置或是,显示出错的bug。
比如,携程中的查询地址的时候输入框的左右滑动效果,可能在看到这种效果的时候,挺多的人会想要通过动画的方式
进行实现,笔者也这么的尝试了,不过效果不理想,在用动画实现的时候还要控制,位移后,停止控件移动,控件的
实际的位置等问题,造成了挺多的问题。
以下是笔者的实现方式,供大家参考
笔者通过延迟执行+动态设置控件的位置进行实现
即 new Handler().postDelayed + view.setLayoutParams 实现的,以下是主要的代码
private void clickAnimation() {
final FrameLayout.LayoutParams layout = (LayoutParams) mClearEditText.getLayoutParams();//获取控件的布局对象
new Handler().postDelayed(new Runnable() {//通过1/1000秒的停顿
@Override
public void run() {
// TODO Auto-generated method stub
nowMarginLift = nowMarginLift - 4;//设置左margin的值
nowMarginRight = nowMarginRight + 4;//设置右margin的值
if (!mIsChangeView) {//判断是左移还是右移
layout.leftMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, nowMarginRight,getResources().getDisplayMetrics());
layout.rightMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, nowMarginLift,getResources().getDisplayMetrics());
} else {
layout.leftMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, nowMarginLift,getResources().getDisplayMetrics());
layout.rightMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, nowMarginRight,getResources().getDisplayMetrics());
}
mClearEditText.setLayoutParams(layout);//动态设置控件的位置
if (nowMarginRight != 40) {//判断是否已经位置到需要的位置
new Handler().postDelayed(this, 1);//没有到达位置继续位移
}else{
mIsChangeOver=true;//变更位置状态
}
}
}, 1);
}
其中 mClearEditText就是要移动的控件,而40就是要移动的距离,这样就实现了,控件的位置,并且不会
出现移动时的点击位置或是,显示出错的bug。
相关文章推荐
- 浅谈Android Support Library 23.2新增夜间模式主题
- Android L中水波纹点击效果的实现
- Android学习笔记----广播接收者
- Gradle 打包知识整理-Android Studio
- Android应用增量升级
- AndroidImagePicker 的使用
- Android项目:手机安全卫士(5)—— 自定义弹窗
- Gradle多渠道打包
- android 数据存储-文件存储
- 解决android4.4以上系统的相册选择图片后获取不到有效的URI
- 如何查看android.jar中的xml文件
- 【Android】不弹root请求框检测手机是否root
- Activity启动模式
- android 测试教程(转)
- 关于android中一种简单的分享方式
- Android 性能优化 二 TraceView工具的使用
- android中左右滑屏的实现(广告位banner组件)
- 使用Android Studio进行单元测试
- 浅析android应用增量升级
- Android性能优化之数据库优化