0

viewSwitcher を使用して 2 つのレイアウトを切り替えたいと思います。ボタンで動くのですが、画面タッチで切り替えたいです。私は onTouchListener の例を見つけて、ある種の類似のものを実装しようとしましたが、うまくいきませんでした。

私のmain.xmlでは、ViewSwitcherと他の2つのLinearLayoutを含む1つのLinear Layoutを取得しました。これらは私が切り替えたいレイアウトです。

ここにあります:

<ViewSwitcher
    android:id="@+id/viewSwitcher"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inAnimation="@android:anim/slide_in_left"
    android:outAnimation="@android:anim/slide_out_right" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/firstlayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/bg"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/titlebar" />

        <Button
            android:id="@+id/somebut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="30px"
            android:background="@drawable/but" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/secondlayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Second layout" >
        </TextView>
    </LinearLayout>
</ViewSwitcher>

と私のコード:

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;
import android.widget.ViewSwitcher;

public class SwitcherActivity extends Activity {
private float downXValue;
private View firstView;
private View SecondView;
private ViewSwitcher vs;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    vs =   (ViewSwitcher)findViewById(R.id.viewSwitcher);
    firstView= findViewById(R.id.firstlayout);
    secondView = findViewById(R.id.secondlayout);
    LinearLayout first = (LinearLayout) findViewById(R.id.firstlayout);
    first.setOnTouchListener((OnTouchListener) this);

}
public boolean onTouch(View arg0, MotionEvent arg1) {

    switch (arg1.getAction()){
        case MotionEvent.ACTION_DOWN:{
            // store the X value when the user's finger was pressed down
            downXValue = arg1.getX();
            break;
        }
        case MotionEvent.ACTION_UP:{
            // Get the X value when the user released his/her finger
            float currentX = arg1.getX();            
            // going backwards: pushing stuff to the right
            if (downXValue < currentX)
            {
                if (vs.getCurrentView() != myFirstView)vs.showPrevious();      
            }
            // going forwards: pushing stuff to the left
            if (downXValue > currentX)
            {
                if (vs.getCurrentView() != mySecondView)
                      vs.showNext();
            }
            break;
        }
    }
    return true;
}
}

私の問題は、次を含む行で ClassCastException を取得したことです。

 first.setOnTouchListener((OnTouchListener) this);
4

1 に答える 1

0

「this」をリスナーとして使用できるように、アクティビティは OnTouchListener を実装する必要があります。現在、ClassCastException をスローしている OnTouchListener に Activity をキャストしようとしています。

また、タッチの処理方法をカスタマイズするには、OnTouchListener メソッドをオーバーライドする必要があります。

于 2012-10-17T18:06:28.123 に答える