마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

viewpager 속도향상에 대해...

0 추천

특정 경로에 있는 폴더안의 모든 이미지들을 불러와서 뷰페이저로 이미지를 볼 수있도록 만들었습니다.

좌/우로 슬라이드 할 때 보일 수 있도록 만들었는데요, 이미지 크기가 조금 크다보니 속도가 매우 더딥니다..

뷰페이저를 다루는건 처음이라, 구글링 예제소스를 참고해서 만들었는데요. 조언 좀 해주시면 감사하겠습니다.


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) // 페이지변경완료
		{
		}
	}

	
}

 

anci (19,950 포인트) 님이 2014년 12월 29일 질문

1개의 답변

0 추천
이미지 로딩 라이브러리를 써서 백그라운드에서 이미지를 로딩하게 처리하세요.
익명사용자 님이 2014년 12월 29일 답변
답변 감사합니다.
라이브러리라고 하면 android.support.v4.view.ViewPager 이걸 말씀하시는건가요?
일단 뷰페이저를 사용하려고(xml 등) 이미 추가한 상태인데요, 백그라운드에서 처리해야하는게 구체적으로 어떤 말씀이신지..여쭤봐도 될까요?
...