URL에서 이미지로드
이미지 URL이 있습니다. 이 URL의 이미지를 ImageView에 표시하고 싶지만 그렇게 할 수는 없습니다.
이것이 어떻게 달성 될 수 있습니까?
URL url = new URL("http://image10.bizrate-images.com/resize?sq=60&uid=2216744464");
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bmp);
위의 대답은 버튼 클릭을 기준으로 이미지를로드하는 경우 유용하지만 새로운 활동에서 이미지를로드하면 UI가 1-2 초 동안 정지됩니다. 주변을 둘러 보면 간단한 비동기 작업 으로이 문제가 해결되었습니다.
활동 종료시 asynctask를 사용하여이 클래스를 추가하려면 다음을 수행하십시오.
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);
매니페스트 파일에 아래 권한을 추가하는 것을 잊지 마십시오
<uses-permission android:name="android.permission.INTERNET"/>
나를 위해 잘 작동합니다. :)
하려고 picassso
한 성명에서 좋은 마감
Picasso.with(context)
.load(ImageURL)
.resize(width,height).into(imageView);
튜토리얼 : https://youtu.be/DxRqxsEPc2s
피카소 lib jar 파일을 추가하십시오.
Picasso.with(context)
.load(ImageURL)
.resize(width,height).noFade().into(imageView);
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;
import android.widget.Toast;
public class imageDownload {
Bitmap bmImg;
void downloadfile(String fileurl,ImageView img)
{
URL myfileurl =null;
try
{
myfileurl= new URL(fileurl);
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
try
{
HttpURLConnection conn= (HttpURLConnection)myfileurl.openConnection();
conn.setDoInput(true);
conn.connect();
int length = conn.getContentLength();
int[] bitmapData =new int[length];
byte[] bitmapData2 =new byte[length];
InputStream is = conn.getInputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
bmImg = BitmapFactory.decodeStream(is,null,options);
img.setImageBitmap(bmImg);
//dialog.dismiss();
}
catch(IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
// Toast.makeText(PhotoRating.this, "Connection Problem. Try Again.", Toast.LENGTH_SHORT).show();
}
}
}
활동에서 imageview를 가져 와서 리소스를 설정하십시오. imageDownload (url, yourImageview);
UrlImageViewHelper는 URL에서 찾은 이미지로 ImageView를 채 웁니다. UrlImageViewHelper는 BitmapDrawables의 모든 이미지 URL을 자동으로 다운로드, 저장 및 캐시합니다. 중복 된 URL은 메모리에 두 번로드되지 않습니다. 비트 맵 메모리는 약한 참조 해시 테이블을 사용하여 관리되므로 이미지를 더 이상 사용하지 않으면 자동으로 가비지 수집됩니다.
UrlImageViewHelper.setUrlDrawable (imageView, "http://example.com/image.png");
https://github.com/koush/UrlImageViewHelper
이 답변을 기반으로 내 로더를 작성합니다.
로딩 효과 및 모양 효과 :
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
import java.io.InputStream;
/**
* Created by Sergey Shustikov (pandarium.shustikov@gmail.com) at 2015.
*/
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
{
public static final int ANIMATION_DURATION = 250;
private final ImageView mDestination, mFakeForError;
private final String mUrl;
private final ProgressBar mProgressBar;
private Animation.AnimationListener mOutAnimationListener = new Animation.AnimationListener()
{
@Override
public void onAnimationStart(Animation animation)
{
}
@Override
public void onAnimationEnd(Animation animation)
{
mProgressBar.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation)
{
}
};
private Animation.AnimationListener mInAnimationListener = new Animation.AnimationListener()
{
@Override
public void onAnimationStart(Animation animation)
{
if (isBitmapSet)
mDestination.setVisibility(View.VISIBLE);
else
mFakeForError.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation)
{
}
@Override
public void onAnimationRepeat(Animation animation)
{
}
};
private boolean isBitmapSet;
public DownloadImageTask(Context context, ImageView destination, String url)
{
mDestination = destination;
mUrl = url;
ViewGroup parent = (ViewGroup) destination.getParent();
mFakeForError = new ImageView(context);
destination.setVisibility(View.GONE);
FrameLayout layout = new FrameLayout(context);
mProgressBar = new ProgressBar(context);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
mProgressBar.setLayoutParams(params);
FrameLayout.LayoutParams copy = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
copy.gravity = Gravity.CENTER;
copy.width = dpToPx(48);
copy.height = dpToPx(48);
mFakeForError.setLayoutParams(copy);
mFakeForError.setVisibility(View.GONE);
mFakeForError.setImageResource(android.R.drawable.ic_menu_close_clear_cancel);
layout.addView(mProgressBar);
layout.addView(mFakeForError);
mProgressBar.setIndeterminate(true);
parent.addView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}
protected Bitmap doInBackground(String... urls)
{
String urlDisplay = mUrl;
Bitmap bitmap = null;
try {
InputStream in = new java.net.URL(urlDisplay).openStream();
bitmap = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return bitmap;
}
protected void onPostExecute(Bitmap result)
{
AlphaAnimation in = new AlphaAnimation(0f, 1f);
AlphaAnimation out = new AlphaAnimation(1f, 0f);
in.setDuration(ANIMATION_DURATION * 2);
out.setDuration(ANIMATION_DURATION);
out.setAnimationListener(mOutAnimationListener);
in.setAnimationListener(mInAnimationListener);
in.setStartOffset(ANIMATION_DURATION);
if (result != null) {
mDestination.setImageBitmap(result);
isBitmapSet = true;
mDestination.startAnimation(in);
} else {
mFakeForError.startAnimation(in);
}
mProgressBar.startAnimation(out);
}
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = mDestination.getContext().getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return px;
}
}
권한 추가
<uses-permission android:name="android.permission.INTERNET"/>
그리고 다음을 실행하십시오.
new DownloadImageTask(context, imageViewToLoad, urlToImage).execute();
다음은 URL에서 이미지를 표시하기위한 샘플 코드입니다.
public static Void downloadfile(String fileurl, ImageView img) {
Bitmap bmImg = null;
URL myfileurl = null;
try {
myfileurl = new URL(fileurl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myfileurl.openConnection();
conn.setDoInput(true);
conn.connect();
int length = conn.getContentLength();
if (length > 0) {
int[] bitmapData = new int[length];
byte[] bitmapData2 = new byte[length];
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is);
img.setImageBitmap(bmImg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
라이브러리를 사용하는 대신 시도한 가장 좋은 방법
public Bitmap getbmpfromURL(String surl){
try {
URL url = new URL(surl);
HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();
urlcon.setDoInput(true);
urlcon.connect();
InputStream in = urlcon.getInputStream();
Bitmap mIcon = BitmapFactory.decodeStream(in);
return mIcon;
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
return null;
}
}
매니페스트에 인터넷 권한 추가
<uses-permission android:name="android.permission.INTERNET" />
아래와 같이 방법을 만드는 것보다
public static Bitmap getBitmapFromURL(String src) {
try {
Log.e("src", src);
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
Log.e("Bitmap", "returned");
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
Log.e("Exception", e.getMessage());
return null;
}
}
이제 이것을 onCreate 메소드에 추가하십시오.
ImageView img_add = (ImageView) findViewById(R.id.img_add);
img_add.setImageBitmap(getBitmapFromURL("http://www.deepanelango.me/wpcontent/uploads/2017/06/noyyal1.jpg"));
이것은 나를 위해 작동합니다.
아래 코드는 RxAndroid를 사용하여 URL 문자열에서 ImageView를 설정하는 방법을 보여줍니다. 먼저 RxAndroid 라이브러리 2.0을 추가하십시오.
dependencies {
// RxAndroid
compile 'io.reactivex.rxjava2:rxandroid:2.0.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.0'
// Utilities
compile 'org.apache.commons:commons-lang3:3.5'
}
이제 setImageFromUrl을 사용하여 이미지를 설정하십시오.
public void setImageFromUrl(final ImageView imageView, final String urlString) {
Observable.just(urlString)
.filter(new Predicate<String>() {
@Override public boolean test(String url) throws Exception {
return StringUtils.isNotBlank(url);
}
})
.map(new Function<String, Drawable>() {
@Override public Drawable apply(String s) throws Exception {
URL url = null;
try {
url = new URL(s);
return Drawable.createFromStream((InputStream) url.getContent(), "profile");
} catch (final IOException ex) {
return null;
}
}
})
.filter(new Predicate<Drawable>() {
@Override public boolean test(Drawable drawable) throws Exception {
return drawable != null;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Drawable>() {
@Override public void accept(Drawable drawable) throws Exception {
imageView.setImageDrawable(drawable);
}
});
}
loadImage("http://relinjose.com/directory/filename.png");
여기 요
void loadImage(String image_location) {
URL imageURL = null;
if (image_location != null) {
try {
imageURL = new URL(image_location);
HttpURLConnection connection = (HttpURLConnection) imageURL
.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);// Convert to bitmap
ivdpfirst.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
} else {
//set any default
}
}
이 시도:
InputStream input = contentResolver.openInputStream(httpuri);
Bitmap b = BitmapFactory.decodeStream(input, null, options);
public class MainActivity extends Activity {
Bitmap b;
ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView)findViewById(R.id.imageView1);
information info = new information();
info.execute("");
}
public class information extends AsyncTask<String, String, String>
{
@Override
protected String doInBackground(String... arg0) {
try
{
URL url = new URL("http://10.119.120.10:80/img.jpg");
InputStream is = new BufferedInputStream(url.openStream());
b = BitmapFactory.decodeStream(is);
} catch(Exception e){}
return null;
}
@Override
protected void onPostExecute(String result) {
img.setImageBitmap(b);
}
}
}
나에게 Fresco 는 다른 도서관 중에서 최고입니다.
그냥 설치 후 프레스코와 단순히이 같은 imageURI을 설정합니다 :
draweeView.setImageURI(uri);
Fresco 혜택 중 일부를 설명 하는 이 답변을 확인하십시오 .
참고 URL : https://stackoverflow.com/questions/5776851/load-image-from-url
'Programing' 카테고리의 다른 글
Java의 @UniqueConstraint 주석 (0) | 2020.06.13 |
---|---|
Objective C를 사용하여 iOS 9에서 상태 표시 줄 텍스트 색상을 밝게 변경 (0) | 2020.06.13 |
Android에서 OAuth 2.0에 대한 서명 인증서 지문 (SHA1)을 얻는 방법은 무엇입니까? (0) | 2020.06.13 |
브리지 패턴은 언제 사용합니까? (0) | 2020.06.13 |
Shapeless에서 Nat 유형의 한계 (0) | 2020.06.13 |