OnGestureListenerをAndroidに実装しようとしています。
レイアウトに3つのTextViewがあります。
私が達成しようとしているのは、2つのtextViewにジェスチャーリスナーを設定することです。
ここにレイアウト-
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/rlMain"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" >
<TextView
Android:id="@+id/tvOne"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_marginBottom="10dp"
Android:layout_marginTop="5dp"
Android:gravity="center"
Android:text="One" />
<TextView
Android:id="@+id/tvTwo"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/tvOne"
Android:layout_centerHorizontal="true"
Android:layout_marginBottom="10dp"
Android:layout_marginTop="5dp"
Android:gravity="center"
Android:text="Two" />
<TextView
Android:id="@+id/tvThree"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/tvTwo"
Android:layout_centerHorizontal="true"
Android:layout_marginBottom="10dp"
Android:layout_marginTop="5dp"
Android:gravity="center"
Android:text="Three" />
そして、これがactivity-
import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.GestureDetector;
import Android.view.GestureDetector.OnGestureListener;
import Android.view.MotionEvent;
public class TimeActivity extends Activity implements OnGestureListener {
GestureDetector gestureScanner;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wheelview);
gestureScanner = new GestureDetector(this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return gestureScanner.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
Log.i("Test", "On Fling");
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}
現在、3つのテキストビューすべてのFlingが呼び出されています。
レイアウト内の特定のビューのジェスチャーリスナーを設定する方法はありますか。
どんな助けも大歓迎です。
onCreate
メソッドでこれを行います。
findViewById(R.id.tvOne).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event){
return gestureScanner.onTouchEvent(event);
}
});
OnTouchListener
sを個々のTextView
sに設定できます。
findViewById(R.id.tvOne).setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
// Your code here
}
}
すべてのジェスチャーを検出したくない場合は、このクラスを試してください: SimpleGestureListener created by myself。
次に、このクラスの使用法のスニペットを示します。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private GestureDetector mDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SimpleGestureListener simpleGestureListener = new SimpleGestureListener();
simpleGestureListener.setListener(new SimpleGestureListener.Listener() {
@Override
public void onScrollHorizontal(float dx) {
Log.i(TAG,"horizontal = " +dx);
}
@Override
public void onScrollVertical(float dy) {
Log.i(TAG,"vertical = " +dy);
}
});
mDetector = new GestureDetector(this, simpleGestureListener);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
スワイプジェスチャーの検出に使用できます。