뷰페이저를 이용해서 (라이브러리 android.support.v4.view.ViewPager 추가)
핸드폰 내의 특정 폴더의 경로를 지정해서 그 안의 모든 이미지들을 보여주고있습니다.
좌우 슬라이드로 넘겨주고, 보여주는 것 까지 ~ 기능은 모두 구현이 되었는데요.
문제가 있습니다. 로딩시간이 꽤 깁니다.
메인에서 버튼을 누르면 새 액티비티로 전환되면서 뷰페이저로 이미지들을 보여주는데,
이 이미지가 한 번 뜨는데 2,3초가 걸립니다. 좌우로 슬라이드 하다보면 약간 버벅이는 현상도 있습니다.
이미지의 갯수는 변동됩니다. [고정x] 백개일수도 있고 열개일 수도있는데..
이미지 크기도 조금 크다보니 느린 면이있네요.. 백그라운드에서 처리를 해보라는 답변을 받았는데,
어떤식으로 해야하늕는 감이 안옵니다;; 조언 부탁드립니다. (__)
public class Gallary extends Activity {
private ViewPager mPager;
ImageView image01;
String path;
String paths[];
// Bitmap bm;
int Gridposition;
int i;
int maxTexture[];
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.gallary);
Intent intent = getIntent();
if (intent != null) {
path = intent.getStringExtra("path"); // 선택한 path받아옴
paths = intent.getStringArrayExtra("paths");
for (int i = 0; i < paths.length; i++) {
Log.d("......paths", paths[i]);
}
Gridposition = intent.getIntExtra("Gridposition", 0);
Log.d(".......position", Integer.toString(Gridposition));
}
// bm = BitmapFactory.decodeFile(path); //path값으로 비트맵 생성.
// image01.setImageBitmap(bm);
// 1023 현재 디바이스의 gl max texture size 알아내기
maxTexture = new int[1];
GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, maxTexture, 0);
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(new PagerAdapterClass(getApplicationContext()));
mPager.setCurrentItem(Gridposition);
}// onCreate
private class PagerAdapterClass extends PagerAdapter {
private LayoutInflater li;
public PagerAdapterClass(Context c) {
super();
li = LayoutInflater.from(c);
}
@Override
public int getCount() // 뷰페이저 총 갯수
{
return paths.length;// 이미지 총 갯수
}
@Override
public Object instantiateItem(View container, int position) {
View v = null; // 뷰 생성하기~
for (i = 0; i < paths.length; i++) // 폴더에 있는 이미지 총 갯수만큼!
{
if (i == position)
{
v = li.inflate(R.layout.gallarydetailactivity, null);
image01 = (ImageView) v.findViewById(R.id.image01);// 사진띄워줄 imageview
Bitmap bm0 = BitmapFactory.decodeFile(paths[i]);
Bitmap bm = bm0.createBitmap(bm0, 0, 0, bm0.getWidth(),bm0.getHeight(), m, false);
int reWidth = (int) (getWindowManager().getDefaultDisplay().getWidth());
int reHeight = (int) (getWindowManager().getDefaultDisplay().getHeight());
Bitmap reSized = Bitmap.createScaledBitmap(bm, reWidth,reHeight, true);
image01.setImageBitmap(reSized);
bm0 = null;
}
}
((ViewPager) container).addView(v, 0);
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
return v;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
// instantiateItem에서 생성한 객체를 이용할 것이지 여부를 반환.
@Override
public boolean isViewFromObject(View pager, Object obj) {
// TODO Auto-generated method stub
return pager == obj;
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View container) // 페이지변경시작
{
}
@Override
public void finishUpdate(View container) // 페이지변경완료
{
}
}
}