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;

}

    }
4

2 に答える 2

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();
于 2013-03-08T13:42:51.043 に答える
0

実際、解決策は私が思っていたよりもはるかに簡単です。万人向けではないかもしれませんが、私の場合は問題ありません。getView()メソッドに Random を追加しました

  Random rnd  = new Random();

    if(position>=pics.length){
        position = rnd.nextInt(13);
    }
于 2013-03-08T14:12:10.377 に答える