0

EditText を拡張し、対応する MotionEvents がいつ発生するかを確認するために onTouchEvent() メソッドを上書きするクラスがあります。

public class CustomEditText extends EditText {
    public CustomEditText(Context context) {
        super(context);
    }
    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public CustomEditText(Context context, AttributeSet attrs, int i) {
        super(context, attrs, i);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN: Log.v("ME", "down");
        break;
        case MotionEvent.ACTION_UP: Log.v("ME", "up");
        break;
        case MotionEvent.ACTION_MOVE: Log.v("ME", "move");
        break;
        case MotionEvent.ACTION_CANCEL: Log.v("ME", "cancel");
        break;
        }
        return true;
    }
}

View が 内にない場合ScrollView、すべてが期待どおりに機能します。指が画面上を動き回っている限り、LogCat は "move" を出力します。しかし、View が a の内側にScrollViewあり、指を垂直に動かしている場合、LogCat は「移動」を出力し、数ミリメートル後に「キャンセル」を出力し、画面上で指を元に戻すまで何も出力しません。これは、水平に移動すると発生しません。

その理由は、この時点で、ScrollView今すぐスクロールを開始する必要があることを認識し、その結果、View から MotionEvents を「盗んで」、それら自体を評価するためだと思います。

私の質問は次のとおりです。拡張する新しいクラスを作成せずに、この動作を禁止するにはどうすればよいScrollViewですか?

楽しみにありがとう

ダニエル R.

4

2 に答える 2

2

やってませんか?setOnTouchListener

元:

ScrollView yourScrollView;
yourScrollView.setOnTouchListener(new View.OnTouchListener(){
    public boolean  onTouch  (View v, MotionEvent event){
        yourTextView.onTouch(yourTextView,event);
    }
});

これらの行に何か..返信してください。回答を最高のものに編集できます

于 2011-08-07T23:36:09.900 に答える
0

(DanielR です。自分のアカウントを取得しました。申し訳ありません。)

迅速な回答をありがとう、シェリフ。それは私の問題を解決します。
私がアプリで実際に行っているのはEditText、ビューをスクロールできる左右の小さなマージンと、一般的な編集アクションが実行される中央のメイン領域の 3 つの領域を持つスクロール可能なものを表示することです。これを達成するために私がやっていることは次
のとおりです: 1. ユーザーが余白でジェスチャーを開始すると、 onTouchListener を に設定してnullScrollViewスクロール アクションが実行されるようにします (このあたりの投稿でそれを読んでください)。
2. メイン領域に触れると、onTouchListener が上で提案したものに設定されるため、スクロールが無効になり、すべてのタッチ イベントが EditText に到達します。以前は、私の onTouchListener は空だったので、単にスクロールすることは禁止されていました。なぜ自分でそれを見なかったのかわかりません。遅すぎると思います;)

改めまして、どうもありがとうございました。

于 2011-08-08T00:21:39.020 に答える