2011-01-03 3 views
15

Quindi, ho seguito questa particolare discussione (How to stop scrolling in a Gallery Widget?) ma non riesco a farlo funzionare correttamente.Creazione di una galleria personalizzata - override su Fling

Ho creato una classe MyGallery personalizzata che estende la Galleria. Ho aggiunto il codice nel link sopra ... dovrei aggiungere <com.example.mygallery al file XML? In tal caso, aggiungo anche l'importazione al file java o non è necessario a causa del file XML? Sono così molto confuso.

Voglio semplicemente fare in modo che la galleria si muova di un'immagine alla volta per volta.

file XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/carlot_background" 
    > 
<com.gallerytest.mygallery 
    android:id="@+id/thisgallery" 
    android:gravity="center" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 
</LinearLayout> 

mygallery.java:

package com.gallerytest; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.KeyEvent; 
import android.view.MotionEvent; 
import android.widget.Gallery; 

public class mygallery extends Gallery { 

    public mygallery(Context ctx, AttributeSet attrSet) { 
     super(ctx); 
     // TODO Auto-generated constructor stub 
    } 

    private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2){ 
      return e2.getX() > e1.getX(); 
     } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){ 
     int kEvent; 
     if(isScrollingLeft(e1, e2)){ //Check if scrolling left 
     kEvent = KeyEvent.KEYCODE_DPAD_LEFT; 
     } 
     else{ //Otherwise scrolling right 
     kEvent = KeyEvent.KEYCODE_DPAD_RIGHT; 
     } 
     onKeyDown(kEvent, null); 
     return true; 
    } 

} 

main.java: pacchetto com.gallerytest;

import android.app.Activity; 
import android.content.Context; 
import android.content.res.TypedArray; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

public class main extends Activity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mygallery gallery = (mygallery) findViewById(R.id.thisgallery); 

     gallery.setAdapter(new AddImgAdp(this)); 

     gallery.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView parent, View v, int position, long id) { 

       Toast.makeText(main.this, "Position=" + position, Toast.LENGTH_SHORT).show(); 
      } 

     }); 

    } 

    public class AddImgAdp extends BaseAdapter { 
     int GalItemBg; 
     private Context cont; 


     private Integer[] Imgid = { 
       R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5}; 

     public AddImgAdp(Context c) { 
      cont = c; 
      TypedArray typArray = obtainStyledAttributes(R.styleable.Gallery1); 
      GalItemBg = typArray.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); 
      typArray.recycle(); 
     } 

     public int getCount() { 
      return Imgid.length; 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView imgView = new ImageView(cont); 

      imgView.setImageResource(Imgid[position]); 

      imgView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      imgView.setBackgroundResource(0x0106000d); 
      imgView.setLayoutParams(new mygallery.LayoutParams(300, 240)); 

      return imgView; 
     } 
    } 
} 

Mi piacerebbe un po 'di aiuto. Grazie!!

~ Rick

risposta

23

basta aggiungere il parametro attrset al costruttore della galleria personalizzato:

super(ctx, attrSet); 

questo ha funzionato per me. Leo Vannucci

+0

Funziona! Grazie ragazzi. – user560837

+3

Forse potresti accettarlo come la risposta finale? –

+0

mi ha aiutato anche .......... grazie – viv

3

Sì. Dovresti semplicemente usare com.gallerytest.mygallery invece di Galleria in XML. Tutto funzionerà bene perché mygallery è una sottoclasse di Gallery. Non è necessario importare in XML.

+0

Ok. Quindi sembra che il mio codice setAdapter non funzioni più correttamente con il codice precedente. Tutto ciò che ho fatto è stato il passaggio da una vista Galleria a una Galleria personalizzata. Qualcuno ha voglia di provare il codice e vedere se è possibile identificare il problema? Probabilmente sto trascurando qualcosa di semplice. GRAZIE! ... anche se sembra che abbia omesso il codice AddImgAdp ... si trova nel link sopra. – user560837

1

La modifica dell'XML era fondamentale ... Avevo ricevuto TypeCastException per un po 'di tempo e non riuscivo a trovare il motivo nel mio codice. Finalmente trovato in questo post "Dovresti semplicemente usare com.gallerytest.mygallery invece di Gallery in XMLs" e ho risolto il mio problema. molte grazie.