web-dev-qa-db-ja.com

フラグメントのタッチイベントを処理する方法

タッチイベントを処理する必要があるのインターフェイスを構築しています。特に、フラグメント内の限定された領域に対してのみ有効にすることができます。問題をよりよく理解し、標準を尊重し、アプリケーションの目標を達成するために、多くのフラグメントの存在を想定するナビゲーションドロワーを計画しました(アクティビティの代わりに)。タッチイベントを使用したアクティビティは非常に簡単に実装できますが、一方で、インターネット上でフラグメントが問題になる可能性がありますと読みました。

アーキテクチャレベルでの私のアプリケーションは、次のとおりです。

うまくいく方法(または問題を回避する方法)を説明するソリューションまたはチュートリアルは見つかりませんでした。次に、「フラグメント内のタッチイベントを有効にする(この場合はgetPressure())」に単純化して問題を単純化します。以下は、問題の解決に役立つコードの一部です。

TestFragment

public class TestFragment extends Fragment {
    private static final String ARG_SECTION_NUMBER = "section_number";

    public static TestFragment newInstance(int sectionNumber) {
        TestFragment fragment = new TestFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public TestFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_test, container, false);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Here I want to return the press value (0 to 1)
    }
}

リスナーをフラグメント全体に関連付ける方法そして、特定の地域の場合?最後に、画面上の圧力の値をどのように返すことができますか?

アドバイスありがとうございます! :)

38
user3319400

あなたの問題を理解したかどうかはわかりませんが、これに答えようとします。フラグメントでタッチイベントを取得するには、次のようにします。

-CreateViewのフラグメントで:

View view = inflater.inflate(R.layout.fragment_test, container, false);

    view.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {

                if(event.getAction() == MotionEvent.ACTION_MOVE){
                    //do something
                }
                return true;
            }
    });

//here the rest of your code

return view;

onTouchでさまざまなMotionEventsを確認できます。たとえば、次のとおりです。

MotionEvent.ACTION_DOWN, MotionEvent.ACTION_UP,...
98
intips