2013-03-08 2 views
0

У меня очень простой Gallery, который я использую для прокрутки нескольких изображений с интервалом в 2 секунды. Мой вопрос: как сделать эту галерею «бесконечной», так что первая картина появляется снова после последней?Создать бесконечную галерею прокрутки Посмотреть

ПРИМЕЧАНИЕ

  • Я знаю о том, что галерея испрашивается осуждается
  • я не выполнил никаких оптимизаций в мой код еще так, что это просто быстрый тест на высокопроизводительном конец планшета. Хотя ваши предложения по поводу оптимизации также оценили

Main:

 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

ответ

1

Вы должны сделать нестандартную Gallaryadapter путем расширения класса ..

Я просто нашел раствор отсюда

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

i может быть полезно для вас;

Также вы можете попробовать это в вашем коде ..

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

хорошо, на самом деле решение гораздо проще, чем я думал. Возможно, это не подходит для всех, но в моем случае все в порядке. Просто добавил Random в getView() метод

Random rnd = new Random(); 

    if(position>=pics.length){ 
     position = rnd.nextInt(13); 
    } 
Смежные вопросы