如何在Android中移动视图?

时间:2012-11-16 11:04:17

标签: android views android-animation

我有一个项目,我有两个挑战:

首先:

  • 将图标移动到手指触摸屏幕的位置:

为此,我发现的最佳方法是在视图上使用 .layout() 方法。

第二

  • 我有两个布局,在 RelativeLayout 上,两者都有屏幕宽度和高度(1隐藏在另一个后面)。每当我点击一个按钮时,我想将一个上方的一个向右移动。

有更好的方法在Android上移动观看次数吗?

使用 .layout() 方法可能有什么缺点?

public void layout (int l, int t, int r, int b) 
Since: API Level 1 
Assign a size and position to a view and all of its descendants 

Parameters:
l  Left position, relative to parent 
t  Top position, relative to parent 
r  Right position, relative to parent 
b  Bottom position, relative to parent  

提前致谢。

5 个答案:

答案 0 :(得分:7)

除了LayoutParams本身的那个视图之外,WindowManager还为每个视图至少维护了两个View类的实例。

检查updateViewLayout的{​​{1}}方法,特别是此部分:

WindowManager

我相信你可以通过直接致电 view.setLayoutParams(wparams); synchronized (this) { int index = findViewLocked(view, true); ViewRoot root = mRoots[index]; mParams[index] = wparams; root.setLayoutParams(wparams, false); } 来搞砸。请改用layout。它会更慢,但更安全(只是IMO)。


更新

[来自:https://stackoverflow.com/a/11188273/327011]

WindowManager.updateViewLayout

答案 1 :(得分:3)

使用手指移动视图的最简单方法是使用View类中的setTranslationX和setTranslationY。

http://developer.android.com/reference/android/view/View.html#setTranslationX(float

如果您要定位api<

您还可以更改View LayoutParams上的边距。 11。

我认为移动onLayout或onDraw函数上的项目会更糟,因为视图已经具有上述选项并且手动绘制视图会因为添加更多项目和不同视图而变得复杂。

答案 2 :(得分:1)

您可以使用object animation

/**
 * The java class is used to move the widgets to the region of the touch point from its original position
 * 
 * @author gfernandes
 *
 */
public class animate {

/**
 * Variable declaration
 * 
 */
    private ObjectAnimator animation1;
    private ObjectAnimator animation2;


/**
 * Function animate: Animates the widget Eg:Button from its position to the 
 *                   position of the touch point.
 *
 * @param[in] -The coordinates of the touch point (x, y)
 *            -The coordinates of the widget position (valx, valy)
 *            -The widget object id
 *                      
 */

public void animategroup1(int x, int y, Object val, int valx, int valy ){

    System.out.println("animategroup1 entered here");
    System.out.println("x:"+x);
    System.out.println("y"+y);
    System.out.println("valx"+valx);
    System.out.println("valy"+valy);

    animation1 = ObjectAnimator.ofFloat(val, "x", valx, x);

    animation2 = ObjectAnimator.ofFloat(val, "y", valy, y);

    AnimatorSet set = new AnimatorSet();

    set.playTogether(animation1, animation2);

    set.start();

 }

}

答案 3 :(得分:0)

答案 4 :(得分:0)

您可以使用动画来移动视图 使用ObjectAnimatior类。像下面一样

ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationY or translationX" , number in Float)
animator.setDuration(miliseconds).start();

视图将随您决定而移