2011-01-03 5 views
15

Also, ich habe diesen bestimmten Thread (How to stop scrolling in a Gallery Widget?) verfolgt, aber ich bin nicht in der Lage, es richtig funktionieren zu bekommen.Erstellen einer benutzerdefinierten Galerie - überschreiben OnFling

Ich habe eine benutzerdefinierte MyGallery-Klasse erstellt, die Gallery erweitert. Ich habe den Code im obigen Link hinzugefügt ... soll ich <com.example.mygallery zu der XML-Datei hinzufügen? Wenn ja, füge ich den Import auch der Java-Datei hinzu oder wird dies aufgrund der XML-Datei nicht benötigt? Ich bin so sehr verwirrt.

Ich möchte einfach die Galerie ein Bild auf einmal pro Schleuder bewegen.

XML-Datei:

<?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: Paket 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; 
     } 
    } 
} 

Ich würde etwas Hilfe lieben. Vielen Dank!!

~ Rick

Antwort

23

Fügen Sie einfach den attrSet param an den Konstruktor der benutzerdefinierten Galerie:

super(ctx, attrSet); 

Das ist für mich gearbeitet. Leo Vannucci

+0

Es funktioniert! Danke Leute. – user560837

+3

Vielleicht könnten Sie dies als endgültige Antwort akzeptieren? –

+0

hat mir auch geholfen .......... danke – viv

3

Ja. Sie sollten einfach com.gallerytest.mygallery anstelle von Gallery in XMLs verwenden. Alles wird gut funktionieren, denn mygallery ist eine Unterklasse von Gallery. Keine Notwendigkeit für Importe in XML.

+0

Ok. Dann scheint es, dass mein setAdapter-Code nicht mehr korrekt mit dem obigen Code funktioniert. Ich habe lediglich von einer Galerieansicht zu einer benutzerdefinierten Galerie gewechselt. Möchte jemand den Code ausprobieren und herausfinden, ob Sie das Problem erkennen können? Ich übersehe wahrscheinlich etwas Einfaches. DANKE! ... obwohl es scheint, dass ich den AddImgAdp-Code weggelassen habe ... es wird im obigen Link gefunden. – user560837

1

Das Ändern der XML war der Schlüssel ... ich hatte TypeCastException für einige Zeit bekommen und konnte den Grund in meinem Code nicht finden. Endlich gefunden in diesem Post "Sie sollten einfach com.gallerytest.mygallery anstelle von Gallery in XMLs verwenden" und löste mein Problem. Danke vielmals.