일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 데이터분석
- 자바스크립트
- 컴퓨터비전
- 소프트웨어
- I'm Sorry
- 클라우드컴퓨팅
- 2
- 알고리즘
- Yes
- 인공지능
- 소프트웨어공학
- 프로그래밍
- 자료구조
- 버전관리
- 머신러닝
- 컴퓨터과학
- 보안
- 코딩
- 프로그래밍언어
- 데이터구조
- 딥러닝
- 파이썬
- 사이버보안
- 빅데이터
- 네트워크
- 컴퓨터공학
- 웹개발
- 네트워크보안
- 데이터과학
- 데이터베이스
- Today
- Total
스택큐힙리스트
안드로이드에서 ListView에서 이미지를 지연로딩하는 방법 본문
나는 일부 이미지와 그에 따른 캡션을 표시하기 위해 ListView 를 사용하고 있습니다. 나는 인터넷에서 이미지를 가져오고 있습니다. 텍스트가 표시되는 동안 UI가 차단되지 않고 이미지가 다운로드되면 표시되는 방법이 있나요?
이미지의 총 수는 고정되어 있지 않습니다.
답변 1
제 앱이 현재 표시하고 있는 이미지를 보유하기 위해 만든 것입니다. 여기에서 사용되는 로그(Log) 객체는 안드로이드 내부의 최종 로그 클래스를 래핑한 제 커스텀 래퍼(wrapper)입니다.
package com.wilson.android.library;
/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
License); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
import java.io.IOException;
public class DrawableManager {
private final Map
public DrawableManager() {
drawableMap = new HashMap
}
public Drawable fetchDrawable(String urlString) {
if (drawableMap.containsKey(urlString)) {
return drawableMap.get(urlString);
}
Log.d(this.getClass().getSimpleName(), image url: + urlString);
try {
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, src);
if (drawable != null) {
drawableMap.put(urlString, drawable);
Log.d(this.getClass().getSimpleName(), got a thumbnail drawable: + drawable.getBounds() + ,
+ drawable.getIntrinsicHeight() + , + drawable.getIntrinsicWidth() + ,
+ drawable.getMinimumHeight() + , + drawable.getMinimumWidth());
} else {
Log.w(this.getClass().getSimpleName(), could not get thumbnail);
}
return drawable;
} catch (MalformedURLException e) {
Log.e(this.getClass().getSimpleName(), fetchDrawable failed, e);
return null;
} catch (IOException e) {
Log.e(this.getClass().getSimpleName(), fetchDrawable failed, e);
return null;
}
}
public void fetchDrawableOnThread(final String urlString, final ImageView imageView) {
if (drawableMap.containsKey(urlString)) {
imageView.setImageDrawable(drawableMap.get(urlString));
}
final Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message message) {
imageView.setImageDrawable((Drawable) message.obj);
}
};
Thread thread = new Thread() {
@Override
public void run() {
//TODO : set imageView to a pending image
Drawable drawable = fetchDrawable(urlString);
Message message = handler.obtainMessage(1, drawable);
handler.sendMessage(message);
}
};
thread.start();
}
private InputStream fetch(String urlString) throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}
답변 2
안드로이드에서 ListView에서 이미지를 로드하는 방법은 페이지 로딩 시간을 최소화하고 사용자 경험을 향상시키는데 매우 유용합니다. 대부분의 사용자는 느린 인터넷 연결 때문에 이미지를 로드하는 데 시간이 걸리는데, 이러한 상황을 피하기 위해 이미지를 지연로드하면 사용자는 페이지를 스크롤할 때 이미지가 표시되도록 할 수 있습니다.지연로드 이미지를 ListView에 추가하는 다양한 방법이 있지만, 가장 일반적인 방법은 Picasso와 Glide 같은 라이브러리를 사용하는 것입니다. 이러한 라이브러리는 이미지 크기를 줄이고 다운로드 속도와 앱의 성능을 향상시킬 수 있는 이미지 캐시를 제공합니다. 앱에서 이미지를 로드하는 방법은 일반적으로 다음과 같습니다.
1. ListView에 ImageView를 추가합니다.
2. 이미지를 로드하기위한 URL을 가져옵니다.
3. Picasso 또는 Glide와 같은 라이브러리를 사용하여 이미지를 지연로드합니다.
4. 이미지가 완전히 로드되면 ImageView에 설정합니다.
지연 로딩을 구현하는 동안 다음 사항을 기억하십시오. 첫째, 이미지는 다른 사용자 인터페이스 구성 요소와 함께 사용되므로 올바른 이미지 크기를 사용하여 앱의 성능을 향상시킵니다. 둘째, 이미지 캐시는 앱의 성능을 향상시키고 이미지 로드 속도를 높이는 데 도움이됩니다. 따라서, Glide나 Picasso와 같은 라이브러리를 사용하도록 선택하는 것이 좋습니다.
이상으로 안드로이드에서 ListView에서 이미지를 지연로드하는 방법에 대해 알아보았습니다. 이미지가 로드되는 동안 사용자는 페이지를 탐색할 수 있으므로 앱의 성능과 사용자 경험을 향상시키는 데 매우 유용합니다. Glide나 Picasso와 같은 이미지 로딩 라이브러리를 사용하여 앱의 성능을 높이고 이미지 로드를 향상시킬 수 있습니다.