2012-11-06 18 views
7

मैं इस CoverFlow उपयोग कर रहा हूँ: http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.htmlदृश्य बदलें onClick coverflow एंड्रॉयड

मैं दृश्य को बदलने के लिए जब मैं एक बटन पर क्लिक करें सक्षम होना चाहते हैं, बटन एक वापस/आगे आइकन है जो आप के पास ले जाएगा किया जा रहा है कवरफ्लो में पिछली/अगली वस्तु।

मैंने कवरफ्लो को थोड़ा सा संशोधित किया है ताकि मैं इसके बजाय एक एक्सएमएल लेआउट का उपयोग कर सकूं।

setContentView(R.layout.main); 

CoverFlow coverFlow = (CoverFlow)findViewById(R.id.coverflow); 

coverFlow.setAdapter(new ImageAdapter(this)); 
ImageAdapter coverImageAdapter = new ImageAdapter(this);  
coverFlow.setAdapter(coverImageAdapter); 
coverFlow.setSpacing(-20); 
coverFlow.setSelection(0, true); 
coverFlow.setAnimationDuration(1000); 

tv = (TextView)findViewById(R.id.textView1); 

coverFlow.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     Toast.makeText(getBaseContext(), String.valueOf(arg2), Toast.LENGTH_SHORT).show(); 
    } 
}); 

coverFlow.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     tv.setText(String.valueOf(arg2)); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // Do something 
    } 
}); 

मेरे एक्सएमएल:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/home_background" 
    android:orientation="vertical" > 

    <com.demo.app.coverflow.CoverFlow 
     android:id="@+id/coverflow" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginBottom="39dp" 
     android:layout_marginLeft="35dp" 
     android:background="@drawable/button_left" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginBottom="39dp" 
     android:layout_marginRight="35dp" 
     android:background="@drawable/button_right" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="55dp" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:text="hello" 
     android:textColor="@color/White" 
     android:textSize="16dp" /> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="170dp" 
     android:layout_marginTop="15dp" 
     android:src="@drawable/unsa_logo" /> 

    <ImageView 
     android:id="@+id/imageView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="14dp" 
     android:layout_marginTop="23dp" 
     android:src="@drawable/pnc_logo" /> 

</RelativeLayout> 
+0

मुझे बताएं कि मेरा उत्तर –

+1

मतलब नहीं था कि अरे यार, धन्यवाद आपके उत्तर के लिए एक बहुत, मैं जाने मैं एक छात्र हूं, एप्लिकेशन एक ऐप है जिसे मैं उस कंपनी के लिए विकसित कर रहा हूं जिस पर मैं काम कर रहा हूं, हालांकि इस हफ्ते और अगले हफ्ते मैं एक यूनी हूं (कोर्स कंपनी/2 सप्ताह में यूनी आदि में 2 सप्ताह है। ..) तो मुझे अभी तक आपके उत्तर का परीक्षण करने का मौका नहीं मिला है लेकिन यह बहुत ही आशाजनक दिखता है :) –

+0

हाहा। पकड़ लिया। क्षमा करें, मुझे भागने का मतलब नहीं था। यह एक उदार सवाल था, इसलिए मैं सिर्फ उत्सुक था। सौभाग्य!! –

उत्तर

3

जब मैं एनीमेशन मैं इस जो सिर्फ एक लाइन में सब कुछ करता है भर में आया था जोड़ने का तरीका पता लगाने के लिए कोशिश कर रहा था:

छोड़ दिया जाने

coverFlow.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, new KeyEvent(0, 0));

सही जाना

coverFlow.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, new KeyEvent(0, 0));

(बस प्रत्येक पंक्ति को अपने संबंधित बटन ऑनक्लिक विधियों में जोड़ें

आशा इस मदद कर सकते हैं, जो उन्हें एक ही स्थिति में स्वयं को पाता है के रूप में मैं था :) किसी और

+0

पर केडीडाउन, मैं कैसे कर सकता हूं प्रिंट टोस्ट। उपरोक्त कोड में क्या संशोधित करने की आवश्यकता है? – user3819810

2

मुझे आशा है कि मैं अपने प्रश्न समझ में

यहाँ मेरी OnCreate() विधि है। यदि हां, तो यहां एक विचार है:

आपको एक निजी आवृत्ति चर स्टोर करने की आवश्यकता है जो कवरफ्लो से प्रदर्शित होने वाली छवि की वर्तमान स्थिति को ट्रैक करता है। फिर, आप इसे setOnItemSelectedListener() विधि से अपडेट करते हैं, जिसे गैलरी से विरासत में मिला है। "बैक" या "फॉरवर्ड" बटन पर, आप दबाए गए बटन के आधार पर बस अपना वर्तमान चयन +/- 1 सेट करें।

अपनी गतिविधि में तो

, एक उदाहरण चर पूर्णांक ऐसा स्थिति पर नज़र रखेंगे ...

public class MyActivity { 
    private int currentImagePosition = -1; 

    //add the rest of your onCreate code here... 
} 

अगला जोड़ने के लिए, आप छवि वर्तमान में किया जा रहा है कि की वर्तमान स्थिति को अद्यतन करने में सक्षम होना चाहिए कवरफ्लो में प्रदर्शित आप setOnItemSelectedListener तो जैसे अधिभावी (अपने onCreate विधि के अंदर) करके कर सकते हैं:

coverFlow.setOnItemSelectedListener(new OnItemSelectedListener(){ 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       currentImagePosition = position; //this will update your current marker 
      } 
}; 

अन्त में, तुम सब करने की प्रत्येक बटन के onclick श्रोताओं सेट कर दिया जाता setSelection(currentImagePosition+1) या setSelection(currentImagePosition-1) का उपयोग करके पिछले या अगले छवि के लिए बदलना होगा। वैसे, setSelection() का सही या गलत पैरामीटर क्या है? मुझे यकीन नहीं है कि यह क्या करता है इसलिए मैं true का उपयोग करने जा रहा हूं जैसे आपने शुरुआत में किया था। अपने onCreate() विधि अब दिखेगा कुछ की तरह:

@Override 
public void onCreate(Bundle savedInstanceState){ 
    //insert your other code in onCreate here in this spot.... 

    //add the following lines to your code: 
    Button goLeft = (Button) findViewById(R.id.button1); 
    goLeft.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       //go to previous image 
         if(currentImagePosition > 0){ //i'm assuming you dont want to go left anymore once at the leftmost image 
          coverFlow.setSelection(currentImagePosition - 1, true); 
         } 
     } 
    }) ; 


    Button goRight = (Button) findViewById(R.id.button2); 
    goRight.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       //go to previous image 
         if(currentImagePosition < coverFlow.getCount()-1){ //i'm assuming you dont want to go left anymore once at the leftmost image 
          coverFlow.setSelection(currentImagePosition + 1, true); 
         } 
     } 
    }) ; 


} 

नोट: स्थिति को अद्यतन करने के बारे में हिस्सा पढ़ने Get the position of the current image displayed in Gallery तो मैं इस काम करता है आशा से काम करने के लिए माना जाता है। यदि नहीं, कम से कम मैंने कोशिश की: डी

शुभकामनाएं !!!

+0

टी किसी भी स्थिति पर क्लिक करने के बाद आप मुझे बता सकते हैं तो केवल उस छवि को स्क्रीन के केंद्र में दिखाई देनी चाहिए जबकि कवरफ्लो में शेष छवियां छिपी जानी चाहिए ....... यह कैसे करें? तो जब मैं आइटम के केंद्र में बाएं या दाएं स्वाइप करता हूं तो सभी वस्तुओं को दिखाना चाहिए? – Erum

+0

@Erum मुझे लगता है कि एंड्रॉइड विचारों में 'सेट दृश्यता' जैसी कुछ करने का एक तरीका है, इसलिए मैं इसका उपयोग दृश्यों को छुपाने के लिए करता हूं। लेकिन मुझे लगता है कि आप जिस विशिष्ट चीज को करना चाहते थे वह थोड़ा और जटिल हो सकता है। शायद आपको स्टैक ओवरफ़्लो पर एक नया प्रश्न पूछना चाहिए, और फिर अधिक लोग (शायद मुझे भी लिंक करें) एक नज़र डाल सकते हैं? –

+0

टी क्या आप इसे देख सकते हैं मैं इस प्रकार के परिणाम चाहता हूं http://www.dailymotion.com/video/x2qx2if – Erum

3

धन्यवाद डेविड, मैं माइक सहयोगियों में से एक हूं लेकिन मैंने कभी जावा की एक पंक्ति नहीं लिखी है। मैं हमारी कंपनी के आईओएस विभाग में काम करता हूं। मुझे समझ में आया कि आप किस बारे में बात कर रहे थे। आपका जवाब सहायक और अच्छी तरह लिखा गया था! क्योंकि आपके onItemSelected आमंत्रित नहीं किया गया (वर्तमान मार्कर अपडेट), मैं पता नहीं क्यों

if (currentimageposition < coverFlow.getcount()-1) { 
    coverFlow.setSelection(currentImagePosition +1, true); 
    currentImagePosition = currentImagePosition +1; 
} 

:

मैं बस को जोड़ने के लिए किया था।

हालांकि, coverFlow.selection(int , bool) एनिमेटेड नहीं है। दृश्य लोड होने पर यह केवल एक सेट विधि है। उदाहरण के लिए, coverFlow.selection(3,true) कवरफ्लो के केंद्र पर चौथी छवि सेट करेगा।