Jestem całkiem nowy w rozwoju Androida i obecnie pracuję z przeglądarką, próbując zrozumieć, w jaki sposób mogę obsługiwać zdarzenia dotykowe/dotknij. Spędziłem cały ranek szukając odpowiedzi na to i nie mogę znaleźć niczego, co mogłoby mi pomóc.Wykrywanie zdarzeń dotknięcia/dotknięcia w okienku podglądu
Zasadniczo mam viewpager z 5 fragmentami, które wszystkie używają tego samego układu. Wszystko, co chcę zrobić, to móc wykryć, kiedy w widoku stacjonarnym jest dotknięcie/dotyk (nie chcę, aby wykrywanie miało miejsce, gdy widok jest przeciągany).
Z tego, co zbieram, wynika, że problem z funkcją ViewPager przechwytywanie domyślnie wszystkich zdarzeń dotykowych. Wierzę, że to może być rozpatrywane przy użyciu:
myPager.requestDisallowInterceptTouchEvent(true);
Początkowo zajmował się OnTouchListener i starał się zalogować, czy metoda onTouch był coraz hit - nie pojawił. Widziałem również, że klasa GestureDetector jest często odrzucana jako rozwiązanie tego problemu, ale szczerze mówiąc, czuję się przytłoczony i nie jestem pewien, które klasy/interfejsy powinienem tu używać.
Wszystko, co chciałbym zrobić, to odebrać proste zdarzenia związane z dotknięciem/dotknięciem podczas korzystania z ViewPagera.
W tej chwili używam zmodyfikowanej wersji samouczka Animation na stronie dla programistów Androida. To jest to, co mam w MainActivity.java plik:
package com.example.pbinteractive;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
public class MainActivity extends FragmentActivity {
/**
* The number of pages (wizard steps) to show in this demo.
*/
private static final int NUM_PAGES = 5;
/**
* The pager widget, which handles animation and allows swiping horizontally to access previous
* and next wizard steps.
*/
private ViewPager mPager;
/**
* The pager adapter, which provides the pages to the view pager widget.
*/
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Instantiate a ViewPager and a PagerAdapter.
mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
}
/**
* A simple pager adapter that represents 5 {@link ScreenSlidePageFragment} objects, in
* sequence.
*/
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return MyPageFragment.create(position);
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
A to co mam w MyPageFragment.java plik:
package com.example.pbinteractive;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
public class MyPageFragment extends Fragment implements OnTouchListener {
/**
* The argument key for the page number this fragment represents.
*/
public static final String ARG_PAGE = "page";
/**
* The fragment's page number, which is set to the argument value for {@link #ARG_PAGE}.
*/
private int mPageNumber;
/**
* Factory method for this fragment class. Constructs a new fragment for the given page number.
*/
public static MyPageFragment create(int pageNumber) {
MyPageFragment fragment = new MyPageFragment();
Bundle args = new Bundle();
args.putInt(ARG_PAGE, pageNumber);
fragment.setArguments(args);
return fragment;
}
public MyPageFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPageNumber = getArguments().getInt(ARG_PAGE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout containing a title and body text.
ViewGroup rootView = (ViewGroup) inflater
.inflate(R.layout.fragment_slide, container, false);
// Set the title view to show the page number.
//((TextView) rootView.findViewById(android.R.id.text1)).setText(
// getString(R.string.title_template_step, mPageNumber + 1));
return rootView;
}
/**
* Returns the page number represented by this fragment object.
*/
public int getPageNumber() {
return mPageNumber;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
}
FYI Sprawdziłem oba te zasoby, ponieważ często wydają się być cytowane jako najlepsze rozwiązanie problemu, z jakim się spotykam (z tego, co mogę zebrać):
android: ViewPager and HorizontalScrollVIew
Fling gesture detection on grid layout
Ale nie byłem w stanie uzyskać z nich dużej pomocy. Tak jak powiedziałem, jestem całkiem nowy w pracy z Androidem, więc chciałbym po prostu zapoznać się z podstawami!
Dzięki
EDIT: Właśnie w celu wyjaśnienia, chciałbym podnieść zdarzeń dotykowych wewnątrz każdej fragmentu, ponieważ raz ja ominąć tej przeszkody Chciałbym mieć jakieś fragmenty zdarzeń dotykowych podczas pracy inne będą wyświetlać tylko niereagującą treść.
Chcesz dotknąć tylko podglądu? lub fragmenty w środku? – Yahor10
właśnie edytowane :-) – alimac83