2011-01-03 25 views
15

Bu özel iş parçacığını (How to stop scrolling in a Gallery Widget?) izledim, ancak düzgün çalışmasını sağlayamadım.Özel Galeri oluşturma - onFling öğesinin üzerine yazılıyor

Galeri'yi genişleten özel bir MyGallery sınıfı oluşturdum. Yukarıdaki bağlantıya kodu ekledim ... XML dosyasına <com.example.mygallery eklemem gerekiyor mu? Eğer öyleyse, ithalatı java dosyasına ekleyebilir miyim yoksa XML dosyası nedeniyle buna gerek yok mu? Çok kafam karıştı.

Sadece galeride bir görüntüyü bir seferde hareket ettirmek istiyorum.

XML dosyası:

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

Yardım isterim. Teşekkürler!!

~ Rick

cevap

23

Sadece özel galerinin kurucusuna attrset param ekleyin:

super(ctx, attrSet); 

Bu benim için çalıştı. Leo Vannucci

+0

Çalışıyor! Teşekkürler beyler. – user560837

+3

Belki de bunu son cevap olarak kabul edebilir misiniz? –

+0

bana da yardım etti .......... teşekkürler – viv

3

Evet. XML'lerde Galeri yerine com.gallerytest.mygallery'u kullanmanız gerekir. Her şey iyi çalışıyor olacak çünkü mygallery Galeri'nin bir alt sınıfıdır. XML'de içe aktarmaya gerek yok.

+0

Tamam. Ardından setAdapter kodumun artık yukarıdaki kodla düzgün şekilde çalışmadığı anlaşılıyor. Tek yaptığım Galeri görünümünden özel bir galeriye geçmek oldu. Kodu denemek ve sorunu tanımlayıp anlayamayacağınızı görmek isteyen var mı? Muhtemelen basit bir şeyle ilgileniyorum. TEŞEKKÜRLER! ... her ne kadar AddImgAdp kodunu dışarıda bıraktığım görünse de ... yukarıdaki bağlantıda bulunur. – user560837

1

XML'in değiştirilmesi önemliydi ... bir süredir TypeCastException alıyorum ve kodumdaki neden bulamadım. Sonunda bu yazıda bulundu "Sadece XML'lerde Galeri yerine com.gallerytest.mygallery kullanmalısınız" ve benim sorunumu çözdü. çok teşekkürler.

İlgili konular