2013-03-08 81 views
0

我有一個非常簡單的Gallery,我用它以2秒的間隔滾動瀏覽一些圖片。我的問題:如何讓這個畫廊「無限」,所以第一張照片在最後一張之後再次出現?創建無限滾動圖庫查看

注意

  • 我所知道的是畫廊聲稱不贊成
  • 我沒有進行任何優化,以我的代碼,但因爲這只是在高快速測試的事實高端平板電腦雖然您對優化建議,也感謝

主營:

 public class MainActivity extends Activity { 
    private Gallery ga; 
private Runnable r = null; 
private Handler mHandler = null; 
private MediaPlayer mp; 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.activity_main); 
    setUpGallery(); 

      mHandler = new Handler(); 
    r = new Runnable() { 

     public void run() { 

      mHandler.postDelayed(r, 2000); 
      ga.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); 

     } 

    }; 

    r.run(); 
      } 

      private void setUpGallery() { 
    ga = (Gallery) findViewById(R.id.gallery); 
    ga.setAdapter(new ImageAdapter(this)); 
    mp = MediaPlayer.create(getApplicationContext(), R.raw.you); 
    mp.start(); 
    mp.setOnCompletionListener(new OnCompletionListener() { 

     @Override 
     public void onCompletion(MediaPlayer mp) { 
      mp.reset(); 
      mp.release(); 

     } 
    }); 

} 

適配器:

    public class ImageAdapter extends BaseAdapter { 
private int[] pics = { R.drawable.s1, R.drawable.s2, R.drawable.s3, 
     R.drawable.s4, R.drawable.s5, R.drawable.s6, R.drawable.s7, 
     R.drawable.s8, R.drawable.s9, R.drawable.s10, R.drawable.s11, 
     R.drawable.s12, R.drawable.s13, R.drawable.s14 }; 
private Context ctx; 


public ImageAdapter(Context c) { 

    ctx = c; 

} 

@Override 
public int getCount() { 

    return pics.length; 

} 

@Override 
public Object getItem(int arg0) { 

    return arg0; 

} 

@Override 
public long getItemId(int arg0) { 

    return arg0; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder = new ViewHolder(); 
    holder.img = new ImageView(ctx); 
    Bitmap bmp = BitmapFactory.decodeResource(ctx.getResources(), pics[position]); 
    holder.img.setImageBitmap(ImageHelper.getRoundedCornerBitmap(bmp, 10)); 

    return holder.img; 

} 

static class ViewHolder { 

    public ViewHolder() { 

    } 

    ImageView img; 

} 

    } 
+0

https://github.com/commonsguy/cwac-endless。可以使用這個。 – Raghunandan 2013-03-08 13:14:00

回答

1

你必須通過擴展類來進行自定義Gallaryadapter ..

我剛剛發現來自這裏的解決方案

http://blog.blundell-apps.com/infinite-scrolling-gallery/

我可能對你有幫助;

你也可以在你的代碼試試這個..

mHandler = new Handler(); 
    r = new Runnable() { 

     public void run() { 
      if (count == adapter.getCount()) { 
       count = 0; 

       ga.setSelection(0); 
       mHandler.postDelayed(r, 2000); 
      } else { 
       mHandler.postDelayed(r, 2000); 
       ga.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); 
       count++; 

      } 
     } 

    }; 


    r.run(); 
0

很好,其實解決的辦法是比我想象的要容易得多。它可能不適合所有人,但在我的情況下可以。剛剛爲getView()方法添加了一個隨機

Random rnd = new Random(); 

    if(position>=pics.length){ 
     position = rnd.nextInt(13); 
    }