我有一个项目,我有两个挑战:
首先:
为此,我发现的最佳方法是在视图上使用 .layout()
方法。
第二
有更好的方法在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
提前致谢。
答案 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)
您可以使用查看方法http://developer.android.com/reference/android/view/View.html#offsetTopAndBottom(int)
或http://developer.android.com/reference/android/view/View.html#offsetLeftAndRight(int)
答案 4 :(得分:0)
您可以使用动画来移动视图
使用ObjectAnimatior
类。像下面一样
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationY or translationX" , number in Float)
animator.setDuration(miliseconds).start();
视图将随您决定而移