আমার একটি চিত্রের ইউআরএল রয়েছে। আমি এই চিত্রটি ভিউতে এই URL টি থেকে একটি চিত্র প্রদর্শন করতে চাই তবে আমি এটি করতে অক্ষম।
কিভাবে এটা অর্জন করা যেতে পারে?
আমার একটি চিত্রের ইউআরএল রয়েছে। আমি এই চিত্রটি ভিউতে এই URL টি থেকে একটি চিত্র প্রদর্শন করতে চাই তবে আমি এটি করতে অক্ষম।
কিভাবে এটা অর্জন করা যেতে পারে?
উত্তর:
URL url = new URL("http://image10.bizrate-images.com/resize?sq=60&uid=2216744464");
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bmp);
AsyncTask।
উপরের স্বীকৃত উত্তরটি দুর্দান্ত যদি আপনি একটি বোতাম ক্লিকের উপর ভিত্তি করে চিত্রটি লোড করছেন তবে আপনি যদি এটি কোনও নতুন ক্রিয়াকলাপে করছেন তবে এটি ইউআই স্থির করে এক বা দুইয়ের জন্য। আশেপাশে খোঁজ পেয়েছি যে একটি সাধারণ অ্যাসিনটাস্ক এই সমস্যাটি দূর করেছে eliminated
আপনার ক্রিয়াকলাপ শেষে এই শ্রেণিটি যুক্ত করতে একটি অ্যাসিঙ্কটাস্ক ব্যবহার করতে:
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);
}
}
এবং আপনার অনক্রিট () পদ্ধতিটি ব্যবহার করে কল করুন:
new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
.execute(MY_URL_STRING);
আপনার ম্যানিফেস্ট ফাইলে নীচে অনুমতি যুক্ত করতে ভুলবেন না
<uses-permission android:name="android.permission.INTERNET"/>
আমার জন্য দুর্দান্ত কাজ করে :)
picasssoএক বিবৃতিতে সুন্দর চেষ্টা করুন ishes
Picasso.with(context)
.load(ImageURL)
.resize(width,height).into(imageView);
টিউটোরিয়াল: https://youtu.be/DxRqxsEPc2s
এটি পিকাসো লাইব জার ফাইল যুক্ত করার চেষ্টা করুন
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();
}
}
}
আপনার ক্রিয়াকলাপে ইমেজভিউ নিন এবং রিসোর্স ইমেজটি ডাউনলোড করুন ডাউনলোড করুন (ইউআরএল, আপনার আইমেজভিউ);
URLIVVHHelper একটি URL- এ পাওয়া একটি চিত্রের সাথে একটি চিত্র ভিউ পূরণ করবে। আরলিগেমভিউহেল্পার সমস্ত চিত্র স্বয়ংক্রিয়ভাবে ডাউনলোড, সংরক্ষণ এবং ক্যাশে সমস্ত চিত্র বিটম্যাপড্রেবেবলকে ইউআরএল করবে। সদৃশ ইউআরএল দু'বার মেমরিতে লোড হবে না। বিটম্যাপ মেমরিটি একটি দুর্বল রেফারেন্স হ্যাশ টেবিল ব্যবহার করে পরিচালনা করা হয়, সুতরাং যত তাড়াতাড়ি চিত্রটি আপনার দ্বারা আর ব্যবহার করা হবে না, এটি স্বয়ংক্রিয়ভাবে আবর্জনা সংগ্রহ করা হবে।
UrlImageViewHelper.setUrlDrawable (চিত্রভিউ, "http://example.com/image.png");
এই উত্তরের ভিত্তিতে আমি আমার নিজের লোডারটি লিখি।
লোডিং প্রভাব এবং উপস্থিতি প্রভাব সহ:
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;
}
}
এখন আপনার অনক্রিয়েট পদ্ধতিতে এটি যুক্ত করুন,
ImageView img_add = (ImageView) findViewById(R.id.img_add);
img_add.setImageBitmap(getBitmapFromURL("http://www.deepanelango.me/wpcontent/uploads/2017/06/noyyal1.jpg"));
এটা আমার জন্য কাজ করে।
নীচের কোডগুলি আপনাকে কীভাবে একটি ইউআরএল স্ট্রিং থেকে আরএক্সএন্ড্রয়েড ব্যবহার করে ইমেজভিউ সেট করতে হবে তা দেখায়। প্রথমে আরএক্সএন্ড্রয়েড লাইব্রেরি 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'
}
এখন চিত্র সেট করতে setImageFromUll ব্যবহার করুন।
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);
}
});
}
দুটি উপায় আছে:
1) গ্লাইড লাইব্রেরি ব্যবহার করা ইউআরএল থেকে চিত্রটি লোড করার সেরা উপায় কারণ আপনি যখন দ্বিতীয় বার একই ইউআরএল প্রদর্শন করার চেষ্টা করবেন তখন এটি অ্যাপ্লিকেশনটির কার্যকারিতা উন্নত করে ক্যাচ থেকে প্রদর্শিত হবে because
Glide.with(context).load("YourUrl").into(imageView);
নির্ভরতা: implementation 'com.github.bumptech.glide:glide:4.10.0'
2) স্ট্রিম ব্যবহার। এখানে আপনি url চিত্র থেকে বিটম্যাপ তৈরি করতে চান
URL url = new URL("YourUrl");
Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bitmap);
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
}
}
ivdpfirst?
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);
}
}
}
আমার কাছে ফ্রেসকো অন্যান্য লাইব্রেরির মধ্যে সেরা।
কেবল ফ্রেসকো সেটআপ করুন এবং তারপরে ইমেজটি কেবল এটির মতো সেট করুন:
draweeView.setImageURI(uri);
ফ্রেস্কোর কিছু সুবিধা সম্পর্কে ব্যাখ্যা করে এই উত্তরটি দেখুন।