首页 > 代码库 > android:View随手指的移动而移动
android:View随手指的移动而移动
我们经常要做一些效果,比如,点击之后的动画,随着手指的移动而移动。那么它们如何实现的呢?我们直到,view的自动移动,我们可以设置动画,比如之前写的Fragment的进入与弹出动画:https://github.com/nuptboyzhb/FragmentAnimationDemo 那么,我们如何是一个View随着手指的移动而移动呢?
1.onTouch事件
2.方法1:setLayoutParams
获得手指的位置之后,就可以通过动态设置View的布局,达到“移动”view的目的。[code]
3.方法2:view.layout(l,t,r,b)
方法二的局限,主要是对view所在的布局有较高的要求,而layout则没有太多要求,既可以是RelativeLayout,也可以是LinearLayout。
另外,在移动的过程中,还可以动态改变view的大小
4.Surfaceview中的对象
在SurfaceView中,我们更容易移动一个view,可以参见“新版飞机大战”源代码[https://github.com/nuptboyzhb/newplanegame]中,主飞机的移动,随着手指的移动而移动。
5.方法1和2的源代码:https://github.com/nuptboyzhb/MoveViewWithFinger
1.onTouch事件
我们为view添加onTouch事件,获取移动过程中,手指相对屏幕的位置信息:[code]
@Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: moveViewWithFinger(view, event.getRawX(), event.getRawY()); break; case MotionEvent.ACTION_UP: break; } return true; }
2.方法1:setLayoutParams
获得手指的位置之后,就可以通过动态设置View的布局,达到“移动”view的目的。[code]
/** * 设置View的布局属性,使得view随着手指移动 注意:view所在的布局必须使用RelativeLayout 而且不得设置居中等样式 * * @param view * @param rawX * @param rawY */ private void moveViewWithFinger(View view, float rawX, float rawY) { RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view .getLayoutParams(); params.leftMargin = (int) rawX - ivMove.getWidth() / 2; params.topMargin = (int) rawY - topTitleHeight - ivMove.getHeight() / 2; view.setLayoutParams(params); }
3.方法2:view.layout(l,t,r,b)
方法二的局限,主要是对view所在的布局有较高的要求,而layout则没有太多要求,既可以是RelativeLayout,也可以是LinearLayout。
/** * 通过layout方法,移动view * 优点:对view所在的布局,要求不苛刻,不要是RelativeLayout,而且可以修改view的大小 * * @param view * @param rawX * @param rawY */ private void moveViewByLayout(View view, int rawX, int rawY) { int left = rawX - ivMove.getWidth() / 2; int top = rawY - topTitleHeight - ivMove.getHeight() / 2; int width = left + view.getWidth(); int height = top + view.getHeight(); view.layout(left, top, width, height); }
另外,在移动的过程中,还可以动态改变view的大小
4.Surfaceview中的对象
在SurfaceView中,我们更容易移动一个view,可以参见“新版飞机大战”源代码[https://github.com/nuptboyzhb/newplanegame]中,主飞机的移动,随着手指的移动而移动。
5.方法1和2的源代码:https://github.com/nuptboyzhb/MoveViewWithFinger
-------------------------------------------------------------------
更多交流,Android开发联盟QQ群:272209595
android:View随手指的移动而移动
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。