0

プロジェクトでギャラリーを使用していて、4つの画像を追加しましたが、右側と左側の両方から無限に配置したいと考えています。どうすればこれを達成できますか?

4

3 に答える 3

3

主なアイデアは、あなたのgetView方法では、使用する必要があるということです

position = position % imagesArray.length;
if (position < 0)
    position = position + imagesArray.length;

imagesArrayは、res フォルダーに画像を保持する配列です。例えば:

public class CircularGallery extends Activity {
/** Called when the activity is first created. */
private Integer[] imagesArray = { R.drawable.picture1, R.drawable.picture2, R.drawable.picture3, R.drawable.picture4, R.drawable.picture5, R.drawable.picture6 , R.drawable.picture7   }; 

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Gallery g = (Gallery) findViewById(R.id.gallery); 
    g.setAdapter(new ImageAdapter(this)); 

    g.setOnItemClickListener(new OnItemClickListener() { 
        public void onItemClick(AdapterView parent, View v, int position, long id) { 
            if (position >= imagesArray.length) { 
                position = position % imagesArray.length; 
            } 
            Toast.makeText(CircularGallery.this, "" + position, Toast.LENGTH_SHORT).show(); 
        } 
    }); 

}

public class ImageAdapter extends BaseAdapter { 
    int mGalleryItemBackground; 
    private Context mContext; 

    public ImageAdapter(Context c) { 
        mContext = c; 
        TypedArray a = obtainStyledAttributes(R.styleable.Gallery1); 
        mGalleryItemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); 

        a.recycle(); 
    } 

    public int getCount() { 
        return Integer.MAX_VALUE; 
    } 

    public Object getItem(int position) { 
        if (position >= imagesArraylength) { 
            position = position % mImageIds.length; 
        } 
        return position; 
    } 

    public long getItemId(int position) { 
        if (position >= imagesArray.length) { 
            position = position % imagesArray.length; 
        } 
        return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
        ImageView i = new ImageView(mContext); 
        if (position >= imagesArray.length) { 
            position = position % imagesArray.length; 
        } 
        i.setImageResource(imagesArray[position]); 
        i.setLayoutParams(new Gallery.LayoutParams(80, 80)); 
        i.setScaleType(ImageView.ScaleType.FIT_XY); 
        i.setBackgroundResource(mGalleryItemBackground); 
        return i; 
    } 

    public int checkPosition(int position) { 
        if (position >= imagesArray.length) { 
            position = position % imagesArray.length; 
        } 
        return position; 
    } 
}}

また、一部の開発者はそのような機能を実行しており、ブログでソースを見つけることができます

于 2012-07-02T07:45:22.897 に答える
2

右側に表示する画像を設定する場合は、設定するだけですg.setSelection(image)

于 2012-11-06T13:49:12.960 に答える
0

My first guess is to change adapter data, i.e. if you detect that you are on the "right edge", then get your first image and add it to the end, then take second image and so on...

于 2012-07-02T07:41:09.123 に答える