LoginSignup
4
2

More than 5 years have passed since last update.

FrameLayoutにOnTouchListenerを実装する

Last updated at Posted at 2016-05-15

FrameLayoutにTouchEventを実装したいことってありますよね。

自分はGestureDetector.OnGestureListenerを使いたい時にこんな感じで実装しました。

TouchableFrameLayout.java
public class TouchableFrameLayout extends FrameLayout {
    private static final String TAG = TouchableFrameLayout.class.getSimpleName();
    private OnTouchListener onTouchListener;

    public TouchableFrameLayout(Context context) {
        super(context);
    }

    public TouchableFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TouchableFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public TouchableFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public void setOnTouchListener(OnTouchListener l) {
        this.onTouchListener = l;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // ここでtrueを返すとonTouchEventが呼ばれるようになる
        return onTouchListener != null;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return onTouchListener.onTouch(getRootView(), event);
    }
}
MainActivity.java
//onCreateとかに
FrameLayout layout = (FrameLayout) findViewById(R.id.frame_layout);

layout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // ここで処理。たとえばgesture関連とか。
        return gestureDetector.onTouchEvent(event);
    }
}

これでonTouchをとれました。
ちなみにOnGestureListenerはonDownでtrueを返さないと以降のEventを処理しなくなってonDown, onShowPress, onLongPresしか呼ばれなくなるので注意が必要です。

詳しくは参考のリンクから。

参考

android - FrameLayout click event is not firing - Stack Overflow
Androidあれこれ: 子Viewのタッチイベントを取得する
onScroll()というかonTouchEvent()が呼ばれない

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2