Gallery에 Item 들을 추가하게 되면 0번 인덱스나 마지막 인덱스로 아이템들을 스크롤 시키게되면 외쪽 또는 오른쪽으로 더이상 스크롤을 할 수 없게 된다.
여기서 구현 하고자 하는 내용은 0번 또는 마지막 인덱스로 스크롤 되더라도 큐와 같이 무한 스크롤 되도록 구현하는 방법.
핵심 포인트
Gallery Adapter에 실제 가지고 있는 Item의 개수의 3배를 가지고 있는 것처럼 보여 지게 하고
Gallery에 setOnItemSelectedListener를 추가하여 OnItemSelectedListener의 onItemSelected에서 가운데 범위를 넘어 서는 경우
Selected Item을 변경해 주면 무한 스크롤을 구현 할 수 있다.
Sample)
//-------------------------------------------------------------------------------------
// GalleryAdapter Class
//-------------------------------------------------------------------------------------
package reno.gallerytest;
import android.content.*;
import android.view.*;
import android.widget.*;
public class GalleryAdapter extends BaseAdapter {
private Context mContext;
private String[] resString = {"1111", "2222", "3333", "4444", "5555"};
public GalleryAdapter (Context c)
{
this.mContext = c;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return resString.length*3; // 총 Item 개수를 X 3으로 리턴한다. 이유는 Index의 맨 끝으로 이동시 좌,우에 Item이 연속되는 것 처럼 보기기 위함.
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return resString[arg0%resString.length];
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0%resString.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView txtView;
position = position % resString.length;
if(convertView == null)
{
txtView = new TextView(mContext);
}else
{
txtView = (TextView)convertView;
}
txtView.setText(resString[position]);
txtView.setLayoutParams(new Gallery.LayoutParams(75, 75));
return txtView;
}
}
//------------------------------------------------------------------------------------------------
// GalleryTest Class
//------------------------------------------------------------------------------------------------
package reno.gallerytest;
import android.app.Activity;
import android.graphics.*;
import android.os.Bundle;
import android.widget.*;
import android.util.*;
import android.view.*;
public class GalleryTest extends Activity {
/** Called when the activity is first created. */
private RGallery unitGallery;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
unitGallery = (RGallery)findViewById(R.id.galUit);
unitGallery.setAdapter(new GalleryAdapter(this));
unitGallery.setSpacing(0);
unitGallery.setSelection(6);
unitGallery.setBackgroundColor(Color.GRAY);
unitGallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
public void onItemSelected (AdapterView parent, View view, int position, long id)
{
Log.d("GalleryTest", "onItemSelected index=" + String.valueOf(position));
if(position < 5)
unitGallery.setSelection(position + 5);
else if(position >= 10)
unitGallery.setSelection(position - 5);
// 이 부분이 무한 스크롤을 해주는 부분으로 가운데 영역을 벗어 나는 경우 setSelection으로 Position을 이동시켜 마치 무한 스크롤이 되게 보여 준다.
}
public void onNothingSelected (AdapterView parent)
{
}
});
}
}
//----------------------------------------------------------------------------------------
// Main.xml
//----------------------------------------------------------------------------------------
댓글 없음:
댓글 쓰기