2012-11-27 13 views
9

के भीतर स्पर्श/टैप ईवेंट का पता लगाना मैं एंड्रॉइड विकास के लिए काफी नया हूं और फिलहाल मैं एक व्यूअर के साथ काम कर रहा हूं, यह समझने की कोशिश कर रहा हूं कि मैं स्पर्श/टैप ईवेंट कैसे संभाल सकता हूं। मैंने सुबह सुबह जवाब देने के लिए बिताया है और मुझे ऐसा कुछ भी नहीं लगता है जो मेरी मदद करता है।व्यूअर

असल में मेरे पास 5 टुकड़े वाले दर्शक हैं जो सभी एक ही लेआउट का उपयोग करते हैं। मैं बस इतना करना चाहता हूं कि स्थिर दृश्य पर टैप/स्पर्श होने पर पता लगाना चाहिए (जब कोई दृश्य खींचा जा रहा है तो मुझे कोई पता नहीं होना चाहिए)।

जो मैं इकट्ठा करता हूं, वहां से व्यूपैगर डिफ़ॉल्ट रूप से सभी स्पर्श ईवेंट को अवरुद्ध करने में एक समस्या प्रतीत होता है। मेरा मानना ​​है कि इस का उपयोग करके निपटा जा सकता है:

myPager.requestDisallowInterceptTouchEvent(true); 

पहले तो मुझे OnTouchListener से कुछ शिकायत मिली और प्रवेश करने के लिए है कि क्या onTouch विधि कभी मारा गया था की कोशिश की है - यह नहीं दिखाई दिया। मैंने इस समस्या के समाधान के रूप में बहुत से बारे में बताए गए जेस्चरडेक्टर वर्ग को भी देखा है, लेकिन स्पष्ट रूप से मुझे अभिभूत महसूस होता है और मुझे यकीन नहीं है कि मुझे कौन से वर्ग/इंटरफेस का उपयोग करना चाहिए।

मैं बस एक व्यूपेजर का उपयोग करते समय सरल स्पर्श/टैप ईवेंट लेना चाहता हूं।

फिलहाल मैं एंड्रॉइड डेवलपर साइट से एनीमेशन ट्यूटोरियल कोड के एक संशोधित संस्करण का उपयोग कर रहा हूं। यह वही है मैं अपने MainActivity.java में फ़ाइल है:

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; 
     } 
    } 
} 

और यही मैं अपने MyPageFragment.java में फ़ाइल है:

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 करें मैं दोनों के देख लिया है इन संसाधनों, क्योंकि उन्हें अक्सर सामना करने वाली समस्या का सबसे अच्छा समाधान माना जाता है (जो मैं एकत्र कर सकता हूं):

android: ViewPager and HorizontalScrollVIew

Fling gesture detection on grid layout

लेकिन मुझे उनसे बहुत मदद नहीं मिली है। जैसे मैंने कहा कि मैं एंड्रॉइड के साथ काम करने के लिए काफी नया हूं इसलिए मैं बस मूल बातें से परिचित होना चाहता हूं!

धन्यवाद

संपादित करें: बस स्पष्ट करने के लिए, मैं हर टुकड़ा भीतर स्पर्श घटनाओं को लेने के लिए चाहते हैं, मैं स्पर्श काम करते हुए घटना के लिए कुछ टुकड़े करना चाहते हैं एक बार के बाद से मैं इस बाधा अतीत मिलता है अन्य सिर्फ अनुत्तरदायी सामग्री प्रदर्शित करेंगे।

+0

आप केवल व्यूअरजर को स्पर्श करना चाहते हैं? या अंदर टुकड़े? – Yahor10

+0

अभी संपादित किया गया :-) – alimac83

उत्तर

8
@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); 
LinearLayout layout = (LinearLayout)rootView.findViewById(R.id.layout)// get your root layout 
layout.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.v(null, "TOUCH EVENT"); // handle your fragment number here 
      return false; 
     } 
    }); 
     return rootView; 
    } 
+0

धन्यवाद याहोर! यह अब टच इवेंट उठा रहा है लेकिन यह इसे स्वाइप पर भी उठा रहा है। दृश्य को स्वाइप करने पर स्पर्श को अनदेखा करना संभव है, लेकिन दृश्य स्थिर होने पर इसका पता लगाना संभव है? – alimac83

+4

यदि मोशनवेन्ट कोड हैंडल करें (ईवेंट == मोशनइवेंट.एक्शन_DOWN) // हैंडल, अगर (घटना == मोशनवेन्ट.एमओवीई) // छोड़ें – Yahor10

+0

आह, मैं देखता हूं। बहुत बहुत धन्यवाद! – alimac83

संबंधित मुद्दे