gpt4 book ai didi

android - 如何在 Android 中移动 View ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:35:31 25 4
gpt4 key购买 nike

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

首先:

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

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

第二个:

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

有没有更好的方法在 Android 上移动 View ?

使用 .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

提前致谢。

最佳答案

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

检查WindowManagerupdateViewLayout方法,特别是这部分:

    view.setLayoutParams(wparams);

synchronized (this) {
int index = findViewLocked(view, true);
ViewRoot root = mRoots[index];
mParams[index] = wparams;
root.setLayoutParams(wparams, false);
}

我相信您可以通过直接调用layout 来制造一些困惑。请改用 WindowManager.updateViewLayout。它会更慢,但安全(仅 IMO)。


更新

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

WindowManager windowsManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)

WindowManager.LayoutParams windowParams = new WindowManager.LayoutParams();
windowParams.x = <new X coord>;
windowParams.y = <new Y coord>
windowParams.height = myImageView.getHeight();
windowParams.width = myImageView.getWidth();
windowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
windowParams.format = PixelFormat.TRANSLUCENT;
windowParams.windowAnimations = 0;

windowManager.updateViewLayout(myImageView, windowParams);

关于android - 如何在 Android 中移动 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13415306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com