상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
"체리와 함께하는 홈파티: 7가지 아이디어"
"체리 러버를 위한 5가지 완벽한 아이템"
사슴과 건강: 자연이 주는 삶의 질 향상 6가지 이유
사슴의 색깔: 그들의 아름다움을 알아보는 6가지 이유
양육비, 소홀히 해서는 안 되는 9가지 이유
양육비, 법원에서의 중요성 6가지 이유
양육비, 아이의 행복을 위한 4가지 이유
중소기업이 지속 가능한 경영을 해야 하는 6가지 이유
국선변호사: 권리 찾기를 위한 5가지 이유
5분 만에 할 수 있는 잠자기 전 스트레칭 5가지
수면을 방해하는 통증을 없애는 7가지 스트레칭
백만원으로 향수 만들기! 7단계 가이드
Previous
Next
수정하기 - ViewPager의 프로그레시브 로딩 구현하기.
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
<a href='https://sangseek.com/sangseeks/ViewPager/ko'>ViewPager</a>에서 프로그레시브 로딩(Progressive Loading)을 구현하는 것은 사용자 경험을 향상시키는 방법 중 하나입니다. 프로그레시브 로딩은 사용자가 페이지를 스크롤할 때 콘텐츠를 점진적으로 로드하여 초기 로딩 시간이 짧아지고, 사용자에게 더 나은 반응성을 제공하는 방식입니다. 다음은 Android의 ViewPager에서 프로그레시브 로딩을 구현하기 위한 단계입니다. 1. 기본 setup 먼저, 기본적인 ViewPager를 설정합니다. 이 예시에서는 FragmentPagerAdapter를 사용할 것입니다. ```java public class MyFragment extends Fragment { // Fragment의 기본 코드 } public class MyPagerAdapter extends FragmentPagerAdapter { private List<String> imageUrls; public MyPagerAdapter(FragmentManager fm, List<String> imageUrls) { super(fm); this.imageUrls = imageUrls; } @Override public Fragment getItem(int position) { // 특정 위치에 있는 이미지를 로드하는 Fragment 반환 return MyFragment.newInstance(imageUrls.get(position)); } @Override public int getCount() { return imageUrls.size(); } } ``` 2. 프로그레시브 로딩을 위한 이미지 로더 설정 ImageView에 이미지를 로드할 때, Glide나 Picasso와 같은 라이브러리를 사용하여 이미지를 비동기적으로 로드합니다. 로딩 중에는 자리 표시자(placeholder)를 보여줄 수 있습니다. ```java public class MyFragment extends Fragment { private static final String ARG_IMAGE_URL = "image_url"; private String imageUrl; public static MyFragment newInstance(String imageUrl) { MyFragment fragment = new MyFragment(); Bundle args = new Bundle(); args.putString(ARG_IMAGE_URL, imageUrl); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != <a href='https://sangseek.com/sangseeks/null/ko'>null</a>) { imageUrl = getArguments().getString(ARG_IMAGE_URL); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_my, container, false); ImageView imageView = view.findViewById(R.id.imageView); // 이미지를 비동기적으로 로드하기 Glide.with(this) .load(imageUrl) .placeholder(R.drawable.placeholder) .into(imageView); return view; } } ``` 3. 페이징 구현 ViewPager에게 필요한 페이지 수를 설정하고, 필요한 시점에 데이터를 로드하도록 설정합니다. OnPageChangeListener 설정 페이지가 변경될 때마다 이미지를 동적으로 로드할 수 있도록 설정합니다. 이를 위해 `ViewPager.OnPageChangeListener`를 사용합니다. ```java viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // 페이지가 스크롤될 때 호출 } @Override public void onPageSelected(int position) { // 페이지가 선택되었을 때 호출 } @Override public void onPageScrollStateChanged(int state) { // 페이지 스크롤 상태가 변경될 때 호출 } }); ``` 4. 데이터 추가 로드 ViewPager의 크기가 클 경우, 주변 페이지에서 추가 데이터를 미리 로드하도록 설정할 수 있습니다. 이를 통해 사용자가 스크롤할 때 매끄럽게 이미지를 로드할 수 있습니다. ```java @Override public void onPageSelected(int position) { // 현재 페이지와 주변 페이지에서 데이터를 로드 int start = Math.<a href='https://sangseek.com/sangseeks/max/ko'>max</a>(0, position - 1); int end = Math.min(imageUrls.size() - 1, position + 1); for (int i = start; i <= end; i++) { loadImage(i); } } private void loadImage(int position) { // 여기서는 간단히 이미지를 로드하는 메소드를 생성할 수 있습니다. // 필요한 경우 캐싱을 통해 성능을 최적화할 수 있습니다. } ``` 최적화 고려사항 1. 메모리 관리 : 각 Fragment가 메모리를 남발하지 않도록 관리합니다. 이미지를 로드한 후에는 적절하게 메모리를 해제합니다. 2. 캐싱 : Glide나 Picasso 등의 이미지 로더에서 제공하는 캐싱 기능을 활용해 중복 로드를 피합니다. 3. 뷰 재사용 : Fragment의 경우 새로운 인스턴스를 생성하기보다는 기존의 인스턴스를 재사용할 수 있습니다. 이렇게 설정하면 사용자가 ViewPager를 스크롤할 때마다 즉시 콘텐츠가 로드되고, 더욱 원활한 사용자 경험을 제공할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기