在android的开发过程中难免有的时候需要的需求是,想要移动某些控件实现某些功能的同时,提高用户的体验

比如,携程中的查询地址的时候输入框的左右滑动效果,可能在看到这种效果的时候,挺多的人会想要通过动画的方式

进行实现,笔者也这么的尝试了,不过效果不理想,在用动画实现的时候还要控制,位移后,停止控件移动,控件的

实际的位置等问题,造成了挺多的问题。

以下是笔者的实现方式,供大家参考

笔者通过延迟执行+动态设置控件的位置进行实现

即  new Handler().postDelayed  +  view.setLayoutParams 实现的,以下是主要的代码

private void clickAnimation() {final FrameLayout.LayoutParams layout = (LayoutParams) mClearEditText.getLayoutParams();//获取控件的布局对象new Handler().postDelayed(new Runnable() {//通过1/1000秒的停顿@Overridepublic void run() {// TODO Auto-generated method stubnowMarginLift = 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。



更多相关文章

  1. Android(安卓)UI控件之ListView实现圆角效果
  2. [置顶] Android上实现仿IOS弹性ScrollView
  3. Android的NoVIP视频解析APP开发完整过程
  4. 暂时遗忘OSGi,让我们去品味一杯android磨出的移动互联网咖啡吧
  5. Android(安卓)UI编程之自定义控件初步(上)——ImageButton
  6. Android(安卓)使用动画效果后的控件位置处理 类似系统通知栏下拉
  7. Android判断GPS是否开启和强制帮用户打开GPS
  8. android 页面布局时定义控件ID时@id/XX和@+id/xx 有什么区别?
  9. Android中高级联动控件 RecyclerView+ViewPager嵌套滑动

随机推荐

  1. SQL查询语句
  2. 后台一 搭建项目
  3. 后台四 菜单列表
  4. markdown标记语言
  5. TP6 linux安装方法
  6. ThinkPHP的使用笔记:验证码的使用和sessio
  7. U盘插入台式电脑时显示请将磁盘插入驱动
  8. laravel-admin 初次使用安装教程
  9. 后台三 账号列表
  10. 后台二 项目流程(阅读)