更改android:layout_weight使OnTouchListener无法正常工作

时间:2014-11-26 15:11:00

标签: android android-layout android-view android-layout-weight

我正在尝试实现一个通过套接字发送数据的虚拟操纵杆。我希望仅在用户按下(触摸)操纵杆时才发送数据。代码一切正常,但我认为操纵杆视图应该更大。为了实现它,我将android:layout_weight RelativeLayout中的leftSide从4更改为3.此后,触摸事件的调整从未注册。操纵杆动画虽然运作得很好。还原更改会使程序再次运行。

这里发生了什么?在屏幕上使视图更大的其他方法是什么?

我有以下布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:baselineAligned="false"
    tools:context="com.my.package.DisplayControlActivity">

<RelativeLayout 
    android:id="@+id/leftSide"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="3" >
    <!-- working fine with android:layout_weight="4" -->

    <SurfaceView
        android:id="@+id/videoStream"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </SurfaceView>
</RelativeLayout>  

<RelativeLayout
    android:id="@+id/rightSide"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/testImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:contentDescription="@string/test_image"
        android:scaleType="fitStart"
        android:src="@drawable/test_image" >
    </ImageView>

    <com.my.package.SquareJoystickView
            android:id="@+id/virtual_joystick"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true">
    </com.my.package.SquareJoystickView>

</RelativeLayout>

这是OnTouchListerer代码的一部分:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /* some irrelevant code */
    joystickView = (SquareJoystickView) findViewById(R.id.virtual_joystick);                
    isSending = false;      
    joystickView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            if (event.getAction() == MotionEvent.ACTION_UP) {               
                isSending = false;
              }
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                isSending = true;
              }
            return true;
        }
    });             
}

0 个答案:

没有答案