【问题标题】:Android Studio - Move View (Linear Layout)Android Studio - 移动视图(线性布局)
【发布时间】:2016-11-16 19:55:07
【问题描述】:

移动布局已经将近 6 天了,但根本没有成功,尝试了很多来自互联网的帮助,但没有任何帮助..

我希望通过 OnTouchListener 将 llPic1 和 llPic2 移动到 ivNjeri 上方。 所以玩家决定哪一个需要移到ivNjeri之上。

使用此代码,它会在移动时振动,并且 llPic1 和 llPic2 会进入 ivNjeri:

float dx = 0, dy = 0, x = 0, y = 0;

@Override
public boolean onTouch(View view, MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            x = event.getX();
            y = event.getY();
            dx = x - view.getX();
            dy = y - view.getY();
        }
        break;
        case MotionEvent.ACTION_MOVE: {
            view.setX(event.getX() - dx);
            view.setY(event.getY() - dy);
        }
        break;
        }
        return true;
    }

我也尝试了很多其他代码,但没有一个有效,任何帮助都会非常感谢:)

【问题讨论】:

  • 您是否正在尝试以这种方式为视图设置动画?或者你的目标是什么?
  • 是的,我希望用户将视图(LinearLayout 或带有 OnTouchListener 的 ImageView)移动到那个大 ImageView 上方..

标签: android android-studio android-linearlayout move ontouchlistener


【解决方案1】:

您应该只使用 1 个ViewGroup 来保存所有图像,包括要重叠的图像和要移动的图像。

为什么图片不能超过大图?

右侧的小图像位于嵌套的LinearLayout 内,这将小图像限制在LinearLayout 内。这就是为什么您可以将图像移动到子LinearLayout 内部但不能超出边界。

使用RelativeLayout 修复它并在大图像上固定宽度的一个示例:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/bigimage"
        android:layout_width="200dp"
        android:layout_height="300dp"
        android:src="@drawable/ic_launcher"/>

    <ImageView
        android:id="@+id/smallimage"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:src="@drawable/ic_launcher"
        android:layout_toRightOf="@id/bigimage"/>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:src="@drawable/ic_launcher"
        android:layout_toRightOf="@id/bigimage"
        android:layout_below="@id/smallimage"/>

</RelativeLayout>

如果您想保持精确的重量,请查看 https://developer.android.com/reference/android/support/percent/PercentFrameLayout.html https://developer.android.com/reference/android/support/percent/PercentRelativeLayout.html

这可以让你控制体重,并且可以保持 1 ViewGroup 中的所有视图。

【讨论】:

  • 你救了我的命,它有效,现在我可以让这个小图像填满正确的屏幕吗(半屏第一半屏第二个)?
  • `DisplayMetrics display = this.getResources().getDisplayMetrics(); int 高度 = display.heightPixels; int 半高 = 高度/2; ivSmallImage.getLayoutParams().height = halfheight; ivSmallImage.requestLayout();它适用于 bigImage 但不适用于这个
  • 如果你使用 PercentRelativeLayout 会很容易,但如果你不想使用依赖,你可能需要做数学并使用 ViewTreeObserver。
【解决方案2】:

如果您只是尝试为视图设置动画,为什么不使用 Animation 来处理它:

TranslateAnimation animation = new TranslateAnimation(0.0f, 400.0f,0.0f, 0.0f);        
//  new TranslateAnimation(xFrom,xTo, yFrom,yTo)

animation.setDuration(5000);  // animation duration 
animation.setRepeatCount(1);  // animation repeat count
animation.setRepeatMode(1);   // repeat animation (left to right, right to left )
//animation.setFillAfter(true);      

llPic1.startAnimation(animation);  // start animation  

【讨论】:

  • 这将自行移动视图,并在大视图下再次移动,如图像 2
  • 这将按您将视图提供给构造函数的位置移动您的视图。并在 ivNjeri 上方的组件树中移动包含 pic1 和 pic2 的线性布局应该没问题
【解决方案3】:

你可以试试这个教程link。我认为你需要删除你的 pic 1 或 pic2(如果你想在拖动后消失。)然后你应该在 ivNjeri 视图上添加另一个图像视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多