android 输入框等控件的移动

在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。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值