0

TextViewAndroid 2.3.3の内部での Touch イベントの処理に問題があります。OnTouchListenerメソッドでアクティビティを実装しています

main.java

 public boolean onTouchEvent(MotionEvent event) {
        if(event.getPointerCount()==1){
  textView.setTextSize(mRatio+13);
        mRatio++;        
        Log.d("TouchEvent", "one touch !");
        }
  if (event.getPointerCount() == 2) {
some code...
  }
  return true; 
 }

そして私のレイアウト(その一部のみ):

   <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:orientation="vertical"
                  android:layout_weight="1.0"
                  android:fadingEdge="none"
                  android:background="@color/white">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" 
            android:layout_margin="10dp">

            <!-- TEXT EMAIL : -->
            <TextView
                android:id="@+id/mail_text"
                android:layout_height="wrap_content"
                android:layout_width="fill_parent"
                android:textSize="15sp"
                android:autoLink="web"
                android:clickable="true"

                android:textColor="@color/mailtext"
                android:scrollbars = "vertical"/>

        </LinearLayout>

    </LinearLayout>

textBox の外側 (ヘッダーやフッターなど) のどこかを「クリック」すると、Touch イベントがトリガーされ、フォントが大きくなります。問題はおそらくスクロールバーが原因だと思います。android:scrollbars = "vertical"しかし、バーを切ると消えてしまいます。

通常、この textView には多くのテキストが含まれています。

この textView 内で onTouchEvents を適切に起動する方法。

編集: この textView が小さい場合、スクロールバーが必要なサイズよりも大きなテキストになるまで touchEvent が機能します。次に、すべてのタッチイベントがオーバーライドされ、textView のみをスクロールできます。TouchEvent は呼び出されません。

4

2 に答える 2

1

私は別の方法で問題を処理します。OnTouchEvent が TextView で機能しなかったため、dispatchTouchEvent をオーバーライドします。アクション「onTouch」を実行する方がはるかに優れています。スクロールバーは機能しており、マルチタッチイベントを画面全体に追加できます。次のようになります。

  @Override
    public boolean dispatchTouchEvent(MotionEvent motionEvent){
          Log.v("NotificationActivity.dispatchTouchEvent()", "got touch");

          if (motionEvent.getPointerCount() == 2) {
    Log.v("touch", "multi touch !");
              int action = motionEvent.getAction();
              int pureaction = action & MotionEvent.ACTION_MASK;
              // some actions ...
          }

        switch (motionEvent.getAction()){
            case MotionEvent.ACTION_DOWN:{
                //Keep track of the starting down-event.
                Log.v("akcjaa","down");
     // some actions ...
                break;
            }
            case MotionEvent.ACTION_UP:{
                //Consume if necessary and perform the fling / swipe action
                //if it has been determined to be a fling / swipe
              Log.v("akcjaa","up");
                break;
            }

        }
        return super.dispatchTouchEvent(motionEvent);
    }
于 2013-10-09T05:30:55.410 に答える