【问题标题】:Losing "scroll" after dragging layout around拖动布局后丢失“滚动”
【发布时间】:2013-03-26 10:36:53
【问题描述】:

我已经实现了这段代码,基本上允许用户在屏幕上移动布局(只是 Y 轴):

public class MainActivity extends Activity implements View.OnTouchListener{
TextView _view;
private int _yDelta;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    _view = (TextView) findViewById(R.id.textView2);

    _view.setOnTouchListener(this);

}

public boolean onTouch(View view, MotionEvent event) {
    final int Y = (int) event.getRawY();
    view = (View) view.getParent();
    RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();

    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            _yDelta = Y - lParams.topMargin;
            break;
        case MotionEvent.ACTION_UP:
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            break;
        case MotionEvent.ACTION_POINTER_UP:
            break;
        case MotionEvent.ACTION_MOVE:
            if (Y - _yDelta < -230 || Y - _yDelta > 160){
              //to avoid view going out of screen
            } else {
                lParams.topMargin = Y - _yDelta;
            }

            lParams.bottomMargin = -250;
            view.setLayoutParams(lParams);
            break;
    }
    return true;
}

}

这是我的 xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="300px"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/bg" />

<RelativeLayout
    android:id="@+id/draggableContent"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/imageView1"
    android:background="#ffffff" >

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="DRAGMEDRAGME DRAGME DRAGME DRAGME"
        android:textSize="25sp" />

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_below="@id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt cillum dolore eu it amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt cillum dolore eu it amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt cillum dolore eu it amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt cillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariatur ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                android:textSize="18sp" />

        </LinearLayout>
    </ScrollView>

</RelativeLayout>

如果我不拖动“标题”,textView1 是可滚动的。当我拖动标题时,整个布局(draggableContent - as view.getParent())会四处移动。但是,当我尝试滚动该 lorem ipsum 时,它不再可滚动。

有没有办法解决这个问题?

我试图找到一些参数,例如“scrollable = true”,但找不到。

谢谢。

编辑 我没有使用布局,而是将其全部替换为 WebView,并且完全一样;无需拖动,它的滚动就可以工作。一旦你拖动它,滚动将不再起作用。

【问题讨论】:

  • 你没有调用超级方法 onTouch
  • super.onTouchEvent(event);?试过了,没变。
  • 这里你正在处理onTouch事件如果用户没有拖动标题只需调用super.onTouchEvent(event);就像return super.onTouchEvent(event);一样
  • return super.onTouchEvent(event); 而不是return true?用这个替换它不起作用。

标签: android android-layout


【解决方案1】:

解决了。

就是这一行

lParams.bottomMargin = -250;

我刚刚删除了它,它现在运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多