2010-09-26 13 views
9

मैं गैलरी प्रोग्रामेटिक रूप से स्क्रॉल एनीमेशन को कार्यान्वित करने की कोशिश कर रहा हूं।स्क्रॉलिंग एनीमेशन प्रोग्रामेटिक रूप से

setSelection(int pos, Boolean animate) के साथ प्रयास किया और यह काम नहीं कर रहा है।

क्या setSelection() विधि को ओवरराइड करने के लिए वैसे भी है।

उत्तर

6

गैलरी.सेट चयन (int स्थिति, बूलियन एनिमेट); http://groups.google.com/group/android-developers/browse_thread/thread/9140fd6af3061cdf/7f89e53ae53e455b?lnk=gst&q=setselection#7f89e53ae53e455b

Soln:

URL नीचे देखें तो आप अभी भी देख रहे हैं हैं, तो मैं तुम्हारे लिए दो संभव समाधान, दोनों थोड़ा अप्रिय है:

(1) आप गैलरी है बना सकते हैं एक चुने हुए वेग के साथ एक झुकाव, इस प्रकार:

myGallery.onFling (शून्य, शून्य, वेग, 0);

वेग को ट्वीव करके, आप को किसी भी दिशा में चयन को स्थानांतरित करने के लिए मान सेट अप कर सकते हैं। गैलरी स्व-केंद्र के रूप में, आप गंतव्य को बिल्कुल सही करने की आवश्यकता नहीं है।

(2) गैलरी स्रोत उपलब्ध होने के नाते, आप अपनी गैलरी को लागू करने के लिए इसे संशोधित कर सकते हैं। ऐसा लगता है कि आपको अधिक कोड जोड़ने की आवश्यकता है ताकि आपके चुने हुए चयन पर समाप्त हो सके।

मैंने सोचा कि मुझे करना होगा (2), लेकिन पाया कि मैं अपनी समस्या के लिए (1) से दूर हो सकता हूं।

+0

तरीका था (1) काम करता है महान, केवल आपके उपयोग सुनिश्चित करें एक पर्याप्त बड़ी वेग। यहां पर एंड्रॉइड दस्तावेज़ों को शर्मिंदा करना बहुत भ्रामक है: "गलत होने पर फ़्लिंग घटना की अधिसूचित" गलत आईएमएचओ है, ऐसा कुछ कहना चाहिए: "गैलरी को फ़्लिंग करने के लिए कहता है" या विधि को निष्पादित किया जाना चाहिए फिंग – pheelicks

2

मैं गैलरी स्रोत को देख रहा था यह देखने के लिए कि क्या मैं यह सुविधा प्राप्त कर सकता हूं। ऐसा लगता है कि इस कोड के साथ कुछ संभव है। हालांकि इससे पहले कि मैं इसे काम कर सकूं, मैंने छोड़ दिया। ऐसा लगता है कि मैं सही निर्देशांक में नहीं जा रहा था इसलिए पुनर्विक्रय हमेशा झूठ लौटा। अगर यह काम करता है तो सच होगा।

बस इसे यहां पोस्ट करने के मामले में कोई और इसे ठीक करने के लिए जाना चाहता है! (यदि आप इसे प्रबंधित करते हैं तो कृपया अपना समाधान पोस्ट करें!)

Rect rect = new Rect(); 
gallery.getHitRect(rect); 


int x = rect.centerX()+getWindowManager().getDefaultDisplay().getWidth(); 
int y = rect.centerY(); 

MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); 
timesGallery.onDown(event); 
boolean res = timesGallery.onSingleTapUp(null); 
2

मैंने "कुरु" द्वारा दिए गए कोड में थोड़ा बदलाव किया। यह अब

Rect rect = new Rect(); 
    gallery.getHitRect(rect); 

    int width = Math.abs(rect.width()); 
    if(!isForwardScroll){ 
     width = width * -1; 
    } 
    int x = rect.centerX()+width/2; 
    int y = rect.centerY(); 

    MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); 
    gallery.onDown(event); 
    boolean res = gallery.onSingleTapUp(null); 
+0

क्या आप अधिक कोड दे सकते हैं या उदाहरण?धन्यवाद – pengwang

6

अगले या पिछले दृश्य क्लिक अनुकरण की Kurru उत्तम सोच के आधार पर काम कर रहा है।

//scroll forward or backward 
private void scroll(int type){ 
    View selectedV = mG.getSelectedView(); 
    int idx = mG.indexOfChild(selectedV); 
    switch(type){ 
     case FORWARD: 
    default: 
     if(idx<mG.getChildCount()-1) 
      idx++; 
     break; 
    case BACKWARD: 
     if(idx>0) 
      idx--;   
     break; 
    } 
    //now scrolled view's child idx in gallery is gotten 
    View nextView = mG.getChildAt(idx); 
    //(x,y) in scrolled view is gotten 
    int x = nextView.getLeft()+nextView.getWidth()/2; 
    int y = nextView.getTop()+nextView.getHeight()/2; 
    String out = String.format("x=%d, y=%d", x, y); 
    Log.i(TAG+".scroll", out); 

    //Kurru's simulating clicking view 
    MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); 
    mG.onDown(event); 
    boolean res = mG.onSingleTapUp(null); 
    Log.i(TAG+".scroll", "onSingleTapUp return =" + res);  
} 
12

अभी मुझे यह समस्या मिली है। मैं गैलरी में से केवल एक तत्व स्थानांतरित करने की आवश्यकता थी, इसलिए मेरे लिए सबसे अच्छा समाधान कुंजी दबाए घटना का अनुकरण करने

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); 

या

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null); 
संबंधित मुद्दे