Android에서 URL별 ImageView를 로드하는 방법은 무엇입니까?
에서 입니까?ImageView
?
// show The Image in a ImageView
new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
.execute("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");
public void onClick(View v) {
startActivity(new Intent(this, IndexActivity.class));
finish();
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
설어있확인다니합는에 다음 되어 있는지 합니다.AndroidManifest.xml
인터넷에 접속할 수 있습니다.
<uses-permission android:name="android.permission.INTERNET" />
Picasso는 종종 한 줄의 코드로 당신의 애플리케이션에서 번거롭지 않은 이미지 로딩을 가능하게 합니다!
Gradle 사용:
implementation 'com.squareup.picasso:picasso:(insert latest version)'
코드 한 줄만!
Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);
글라이드 부드러운 스크롤에 초점을 맞춘 Android용 이미지 로드 및 캐싱 라이브러리
Gradle 사용:
repositories {
mavenCentral()
google()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}
// For a simple view:
Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(imageView);
프레스코는 Android 응용 프로그램에 이미지를 표시하는 강력한 시스템입니다.프레스코는 이미지 로딩과 표시를 처리하므로 그럴 필요가 없습니다.
코일은 코틀린 코루틴스가 지원하는 안드로이드용 이미지 로딩 라이브러리입니다.
implementation("io.coil-kt:coil:2.3.0")
를 를지로려에 ImageView
부하 확장 기능을 사용합니다.
imageView.load("https://example.com/image.jpg")
먼저 이미지를 다운로드해야 합니다.
public static Bitmap loadBitmap(String url) {
Bitmap bitmap = null;
InputStream in = null;
BufferedOutputStream out = null;
try {
in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE);
final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
copy(in, out);
out.flush();
final byte[] data = dataStream.toByteArray();
BitmapFactory.Options options = new BitmapFactory.Options();
//options.inSampleSize = 1;
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options);
} catch (IOException e) {
Log.e(TAG, "Could not load Bitmap from: " + url);
} finally {
closeStream(in);
closeStream(out);
}
return bitmap;
}
그런 다음 이미지 보기를 사용합니다.이미지 보기에 비트맵을 설정하도록 이미지 비트맵 설정
아무튼 제 댓글을 댓글로 올려달라고 하시는데 제가 올려드립니다.
URL newurl = new URL(photo_url_str);
mIcon_val = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
profile_photo.setImageBitmap(mIcon_val);
다양한 프로젝트에서 반복적으로 필요한 것처럼 보이기 때문에 이를 처리하기 위해 수업을 작성했습니다.
https://github.com/koush/UrlImageViewHelper
URL 이미지 보기도우미는 URL에 있는 이미지로 이미지 보기를 채웁니다.
샘플은 Google 이미지 검색을 수행하고 결과를 비동기식으로 로드/표시합니다.
URL 이미지 보기도우미는 비트맵 드로잉 가능한 모든 이미지 URL을 자동으로 다운로드, 저장 및 캐시합니다.중복 URL은 메모리에 두 번 로드되지 않습니다.비트맵 메모리는 약한 참조 해시 테이블을 사용하여 관리되므로 이미지가 더 이상 사용되지 않는 즉시 자동으로 가비지 수집됩니다.
위에서 허용된 답변은 버튼 클릭을 기반으로 이미지를 로드하는 경우에는 좋지만, 새 작업에서 로드하는 경우에는 UI가 1~2초 동안 고정됩니다.주위를 둘러보니 간단한 비동기 작업으로 이 문제가 해결되었습니다.
비동기 작업을 사용하려면 활동 끝에 이 클래스를 추가합니다.
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
다음을 사용하여 onCreate() 메서드에서 호출합니다.
new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
.execute(MY_URL_STRING);
결과적으로 빠르게 로드된 활동과 사용자의 네트워크 속도에 따라 몇 초 후에 표시되는 이미지 보기가 생성됩니다.
이 LoadingImageView 뷰를 사용하여 URL에서 이미지를 로드할 수도 있습니다.
http://blog.blundellapps.com/imageview-with-loading-spinner/
해당 링크에서 클래스 파일을 추가한 후 URL 이미지 보기를 인스턴스화할 수 있습니다.
xml 단위:
<com.blundell.tut.LoaderImageView
android:id="@+id/loaderImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
image="http://developer.android.com/images/dialog_buttons.png"
/>
코드:
final LoaderImageView image = new LoaderImageView(this, "http://developer.android.com/images/dialog_buttons.png");
다음을 사용하여 업데이트:
image.setImageDrawable("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");
그런 작업을 할 수 있는 가장 좋은 현대 도서관은 피카소 바이 스퀘어입니다.하나의 라이너로 이미지를 URL로 ImageView에 로드할 수 있습니다.
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
public class LoadWebImg extends Activity {
String image_URL=
"http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView bmImage = (ImageView)findViewById(R.id.image);
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
Bitmap bm = LoadImage(image_URL, bmOptions);
bmImage.setImageBitmap(bm);
}
private Bitmap LoadImage(String URL, BitmapFactory.Options options)
{
Bitmap bitmap = null;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
bitmap = BitmapFactory.decodeStream(in, null, options);
in.close();
} catch (IOException e1) {
}
return bitmap;
}
private InputStream OpenHttpConnection(String strURL) throws IOException{
InputStream inputStream = null;
URL url = new URL(strURL);
URLConnection conn = url.openConnection();
try{
HttpURLConnection httpConn = (HttpURLConnection)conn;
httpConn.setRequestMethod("GET");
httpConn.connect();
if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
inputStream = httpConn.getInputStream();
}
}
catch (Exception ex)
{
}
return inputStream;
}
}
안녕하세요 저는 이것을 시도해보는 가장 쉬운 코드가 있습니다.
public class ImageFromUrlExample extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView imgView =(ImageView)findViewById(R.id.ImageView01);
Drawable drawable = LoadImageFromWebOperations("http://www.androidpeople.com/wp-content/uploads/2010/03/android.png");
imgView.setImageDrawable(drawable);
}
private Drawable LoadImageFromWebOperations(String url)
{
try{
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
}catch (Exception e) {
System.out.println("Exc="+e);
return null;
}
}
}
main.xml
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/ImageView01"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
이것을 먹어보세요.
이미지가 있는 목록 보기에 대해 유사한 작업을 수행해야 하기 때문에 최근에 여기에서 스레드를 찾았지만, 여기에 표시된 첫 번째 샘플 클래스(jleedev)에서 읽을 수 있듯이 원리는 간단합니다.이미지의 입력 스트림을 가져옵니다(웹에서)
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();
}
그런 다음 이미지를 그리기 가능으로 저장하고 setImageDrawable을 통해 이미지 보기로 전달할 수 있습니다.다시 위쪽 코드 조각에서 전체 스레드를 살펴봅니다.
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
여기에 많은 좋은 정보들이...저는 최근에 SmartImageView라는 수업이 지금까지 정말 잘 작동하는 것처럼 보이는 수업을 찾았습니다.통합 및 사용이 매우 쉽습니다.
http://loopj.com/android-smart-image-view/
https://github.com/loopj/android-smart-image-view
업데이트: 이에 대한 블로그 게시물을 작성하게 되었으니 SmartImageView 사용에 대한 도움말을 확인하십시오.
2차 업데이트:저는 이제 이것을 위해 항상 피카소를 사용하고 있습니다(위 참조). 강력 추천합니다. :)
바와 입니다.AsyncTask
의지와 구글링을 조금 한 후에 나는 이 문제에 대한 한 가지 방법을 더 찾았습니다.
Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src");
imageView.setImageDrawable(drawable);
전체 기능은 다음과 같습니다.
public void loadMapPreview () {
//start a background thread for networking
new Thread(new Runnable() {
public void run(){
try {
//download the drawable
final Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src");
//edit the view in the UI thread
imageView.post(new Runnable() {
public void run() {
imageView.setImageDrawable(drawable);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
에 다음 을 추가하는 것을 잊지 AndroidManifest.xml
인터넷에 접속할 수 있습니다.
<uses-permission android:name="android.permission.INTERNET" />
저는 이것을 직접 시도했고 아직 어떤 문제에도 직면하지 않았습니다.
imageView.setImageBitmap(BitmapFactory.decodeStream(imageUrl.openStream()));//try/catch IOException and MalformedURLException outside
이게 도움이 될 겁니다
이미지 보기를 정의하고 이미지를 로드합니다...
Imageview i = (ImageView) vv.findViewById(R.id.img_country);
i.setImageBitmap(DownloadFullFromUrl(url));
그런 다음 이 메서드를 정의합니다.
public Bitmap DownloadFullFromUrl(String imageFullURL) {
Bitmap bm = null;
try {
URL url = new URL(imageFullURL);
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
bm = BitmapFactory.decodeByteArray(baf.toByteArray(), 0,
baf.toByteArray().length);
} catch (IOException e) {
Log.d("ImageManager", "Error: " + e);
}
return bm;
}
String img_url= //url of the image
URL url=new URL(img_url);
Bitmap bmp;
bmp=BitmapFactory.decodeStream(url.openConnection().getInputStream());
ImageView iv=(ImageView)findviewById(R.id.imageview);
iv.setImageBitmap(bmp);
예외 처리 및 비동기 작업이 있는 버전:
AsyncTask<URL, Void, Boolean> asyncTask = new AsyncTask<URL, Void, Boolean>() {
public Bitmap mIcon_val;
public IOException error;
@Override
protected Boolean doInBackground(URL... params) {
try {
mIcon_val = BitmapFactory.decodeStream(params[0].openConnection().getInputStream());
} catch (IOException e) {
this.error = e;
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean success) {
super.onPostExecute(success);
if (success) {
image.setImageBitmap(mIcon_val);
} else {
image.setImageBitmap(defaultImage);
}
}
};
try {
URL url = new URL(url);
asyncTask.execute(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
private Bitmap getImageBitmap(String url) {
Bitmap bm = null;
try {
URL aURL = new URL(url);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
} catch (IOException e) {
Log.e(TAG, "Error getting bitmap", e);
}
return bm;
}
이를 위한 간단하고 깨끗한 방법은 오픈 소스 라이브러리 Prime을 사용하는 것입니다.
이 코드는 테스트를 거쳤으며 완전히 작동합니다.
URL req = new URL(
"http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"
);
Bitmap mIcon_val = BitmapFactory.decodeStream(req.openConnection()
.getInputStream());
목록 보기 그리드 보기, 일반 레이아웃 등 모든 컨테이너에서 imageView 작업
private class LoadImagefromUrl extends AsyncTask< Object, Void, Bitmap > {
ImageView ivPreview = null;
@Override
protected Bitmap doInBackground( Object... params ) {
this.ivPreview = (ImageView) params[0];
String url = (String) params[1];
System.out.println(url);
return loadBitmap( url );
}
@Override
protected void onPostExecute( Bitmap result ) {
super.onPostExecute( result );
ivPreview.setImageBitmap( result );
}
}
public Bitmap loadBitmap( String url ) {
URL newurl = null;
Bitmap bitmap = null;
try {
newurl = new URL( url );
bitmap = BitmapFactory.decodeStream( newurl.openConnection( ).getInputStream( ) );
} catch ( MalformedURLException e ) {
e.printStackTrace( );
} catch ( IOException e ) {
e.printStackTrace( );
}
return bitmap;
}
/** Usage **/
new LoadImagefromUrl( ).execute( imageView, url );
이 방법을 사용해 보십시오. 이것이 문제를 해결하는 데 도움이 되기를 바랍니다.
여기서는 url/server에서 asyncTask 방식으로 이미지 로드에 "AndroidQuery" 외부 라이브러리를 사용하는 방법과 로드된 이미지를 장치 파일 또는 캐시 영역에 캐시하는 방법에 대해 설명합니다.
- 여기에서 "AndroidQuery" 라이브러리 다운로드
- 이 병을 프로젝트 lib 폴더에 복사/붙여넣고 이 라이브러리를 프로젝트 빌드 경로에 추가합니다.
- 이제 사용법을 데모로 보여드리겠습니다.
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageFromUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"/>
<ProgressBar
android:id="@+id/pbrLoadImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</FrameLayout>
</LinearLayout>
기본 활동.java
public class MainActivity extends Activity {
private AQuery aQuery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aQuery = new AQuery(this);
aQuery.id(R.id.imageFromUrl).progress(R.id.pbrLoadImage).image("http://itechthereforeiam.com/wp-content/uploads/2013/11/android-gone-packing.jpg",true,true);
}
}
Note : Here I just implemented common method to load image from url/server but you can use various types of method which can be provided by "AndroidQuery"to load your image easily.
Android Query는 캐시 및 로드 진행률과 같은 훨씬 더 많은 것을 처리할 수 있습니다.
여기를 보세요.
저는 가장 좋은 접근법이라고 생각합니다.
언급URL : https://stackoverflow.com/questions/2471935/how-to-load-an-imageview-by-url-in-android
'programing' 카테고리의 다른 글
판다 데이터 프레임 열 dtype 할당 (0) | 2023.06.06 |
---|---|
Python: __init__ 내에서 예외를 제기하는 것은 나쁜 형식입니까? (0) | 2023.06.06 |
데이터 목록과 함께 파이썬에서 Matplotlib을 사용하여 히스토그램을 그리는 방법은 무엇입니까? (0) | 2023.06.06 |
팬더를 사용하여 두 열 비교 (0) | 2023.06.06 |
C 코드를 "멀티 스레드"하는 방법 (0) | 2023.06.06 |