رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

پست های پیشنهاد شده

سلام خیلیییی وقت بود نبودم این آموزش مخصوص دوستانی که نیاز دارن عکسی از نت لود کنن

 

private class DIT extends AsyncTask {

String Url;

ImageView view;

private DIT(String url,ImageView img) {

Url = "";

view =img;

}

protected Bitmap doInBackground(String... arg0) {

// TODO Auto-generated method stub

Bitmap mi = null;

try {

InputStream im = new URL(Url).openStream();

mi = BitmapFactory.decodeStream(im);

} catch (Exception e) {

}

return mi;

}

 

مقدار Url که مشخصه لینک عکستون هست ImageView هم همون ImageView ی هست که میخواد عکس توش قرار بگیره.

نحوه اجرا این کد اینه که اون جایی که خواستید این دستور رو وارد کنید.

 

new DIT(link,img).execute();

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون از کدتون

ولی توجه داشته باشید که اگر بخواید تعداد زیادی عکس لود کنید (مثلا یه لیست دارین میخواین موقع اجرای برنامه 20 تا عکس از نت لود بشه توش) این روش خوب نیست. در این مواقع استفاده از کتابخونه هایی مثل پیکاسو یا والی یا UIL خیلی بهتره

یا اینکه خودتون بشینید با Handler و HandlerThread همچین سیستمی بنویسید که کار بیهوده ایه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

  • مطالب مشابه

    • توسط mojcom
      سلام دوستان - من از چند ایمیج ویو توی یک لایوت استفاده کردم برای نمایش تصاویر بصورت گالری که اونها رو بصورت 3 ستونی کنار هم نشون میدم حالا میخوام عرض اونها رو وابسته به عرض صفحه نمایش گوشی کنم یعنی عرضش تقسیم به سه بشه تا عرض صفحه های مختلف رو پوشش بده - میدونم باید از خاصیت weight استفاده کنم اما برای ارتفاعش نمیدونم چیکار کنم تا بصورت مربعی در بیاد یعنی هر اندازه که عرض ایمیج ویوها میشه ارتفاعشون هم همونقدر بشه - لطفا اگه کسی میدونه راهنمایی کنه ممنونم
    • توسط alireza123
      سلام میخواستم کاری کنم که زمانی که عکس از دوربین یا گالری انتخاب میشه اونا رو کراپ کنه.
      چیکار باید بکنم
    • توسط mehdisamavat
      سلام 
      لطفا راهنمایی کنید 
      این کدهبا کد های زید میخوام فایلی رو دانلود و پروگرس بار میزان دانلود شده رو نمایش بده اما پروگرس بار اصلا درست اجرا نمیشه 
      یعنی مقدار دانلود شده رو نمایش نمیده 
       
      package com.rule.myapplication; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.os.PowerManager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class MainActivity extends AppCompatActivity { Button button, button2, button3; ImageView imageView; ProgressDialog mProgressDialog; final DownloadTask downloadTask = new DownloadTask(MainActivity.this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); button2 = (Button) findViewById(R.id.button2); button3 = (Button) findViewById(R.id.button3); imageView = (ImageView) findViewById(R.id.imageView); int i = 001 + 002; if (i < 10) { Toast.makeText(MainActivity.this, "00" + i, Toast.LENGTH_SHORT).show(); } button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { loadImageFromStorage("/data/data/com.rule.myapplication/part2_button_gallery/part2_button_21"); } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { unzip("/data/data/com.rule.myapplication/part2_button_gallery.zip", "/data/data/com.rule.myapplication/part2_button_gallery"); } }); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final DownloadTask downloadTask = new DownloadTask(MainActivity.this); downloadTask.execute("http://mehdisamavat.ir/part2_button_gallery.zip"); } }); // instantiate it within the onCreate method mProgressDialog = new ProgressDialog(MainActivity.this); mProgressDialog.setMessage("A message"); mProgressDialog.setIndeterminate(true); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.setCancelable(true); // execute this when the downloader must be fired mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { downloadTask.cancel(true); } }); } // usually, subclasses of AsyncTask are declared inside the activity class. // that way, you can easily modify the UI thread from here private class DownloadTask extends AsyncTask<String, Integer, String> { private Context context; private PowerManager.WakeLock mWakeLock; public DownloadTask(Context context) { this.context = context; } @Override protected String doInBackground(String... sUrl) { InputStream input = null; OutputStream output = null; HttpURLConnection connection = null; try { URL url = new URL(sUrl[0]); connection = (HttpURLConnection) url.openConnection(); connection.connect(); // expect HTTP 200 OK, so we don't mistakenly save error report // instead of the file if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { return "Server returned HTTP " + connection.getResponseCode() + " " + connection.getResponseMessage(); } // this will be useful to display download percentage // might be -1: server did not report the length int fileLength = connection.getContentLength(); // download the file input = connection.getInputStream(); output = new FileOutputStream("/data/data/com.rule.myapplication/part2_button_gallery.zip"); byte data[] = new byte[4096]; long total = 0; int count; while ((count = input.read(data)) != -1) { // allow canceling with back button if (isCancelled()) { input.close(); return null; } total += count; // publishing the progress.... if (fileLength > 0) // only if total length is known // publishProgress((int) (total * 100 / fileLength)); mProgressDialog.setProgress((int) (total * 100 / fileLength)); output.write(data, 0, count); } } catch (Exception e) { return e.toString(); } finally { try { if (output != null) output.close(); if (input != null) input.close(); } catch (IOException ignored) { } if (connection != null) connection.disconnect(); } return null; } @Override protected void onPreExecute() { super.onPreExecute(); // take CPU lock to prevent CPU from going off if the user // presses the power button during download PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName()); mWakeLock.acquire(); mProgressDialog.show(); } @Override protected void onProgressUpdate(Integer... progress) { super.onProgressUpdate(progress); // if we get here, length is known, now set indeterminate to false mProgressDialog.setIndeterminate(false); mProgressDialog.setMax(300); // mProgressDialog.setProgress(progress[0]); } @Override protected void onPostExecute(String result) { mWakeLock.release(); mProgressDialog.dismiss(); if (result != null) Toast.makeText(context, "Download error: " + result, Toast.LENGTH_LONG).show(); else Toast.makeText(context, "File downloaded", Toast.LENGTH_SHORT).show(); } } public static Boolean unzip(String sourceFile, String destinationFolder) { ZipInputStream zis = null; try { zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceFile))); ZipEntry ze; int count; byte[] buffer = new byte[8192]; while ((ze = zis.getNextEntry()) != null) { String fileName = ze.getName(); fileName = fileName.substring(fileName.indexOf("/") + 1); File file = new File(destinationFolder, fileName); File dir = ze.isDirectory() ? file : file.getParentFile(); if (!dir.isDirectory() && !dir.mkdirs()) throw new FileNotFoundException("Invalid path: " + dir.getAbsolutePath()); if (ze.isDirectory()) continue; FileOutputStream fout = new FileOutputStream(file); try { while ((count = zis.read(buffer)) != -1) fout.write(buffer, 0, count); } finally { fout.close(); } } } catch (IOException ioe) { Log.d("ff", ioe.getMessage()); return false; } finally { if (zis != null) try { zis.close(); } catch (IOException e) { } } return true; } private void loadImageFromStorage(String path) { try { File f = new File(path, "akhlagh_Page_1.jpg"); Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f)); imageView.setImageBitmap(b); } catch (FileNotFoundException e) { e.printStackTrace(); } } } کد کامله و داخل یه اکتیویتی میتونید اجرا بگیرید فقط پرمیشن و یه دکمه لازم داره
    • توسط alireza123
      سلام
      من یه لیست بی پایان با ریسایکرویو ساختم . زمانی که به انتهای  اون مقداری که از سرور می گیریه دوباره از یه کلاس asyntask  فراخوانی میشه . کدها رو در پایین قرار دارم. درست کار میکنه ولی هنگامی که اسکرول سریع میدم غاطی می کنه لودینگ متوقف نمیشه کل و پروسه پایان لیست دیگه متوقف میشه کار نمی کنه . مشکل از کجاس؟ و میخواستم بدونم برای متوقف کردن اجرا کلاس asynctask  چی کار باید کرد؟
      public class home_agahi_server extends AsyncTask<String,Void,String> { private Context c; private Activity ac; private String state_id; private String lim; private RecyclerView rec; home_agahi3_server mTask = null; private final ReentrantLock lock = new ReentrantLock(); private final Condition tryAgain = lock.newCondition(); private volatile boolean finished = false; public home_agahi_server(Context c,Activity ac,String lim ){ this.c=c; this.ac=ac; this.lim=lim; this.state_id=state_id; _name.clear(); _id.clear(); _body.clear(); _img.clear(); _imgs.clear(); _price.clear(); _color.clear(); _size.clear(); _shenas.clear(); _time.clear(); _expire.clear(); _visit_today.clear(); _visit_total.clear(); _mobile.clear(); _cat.clear(); _user_id.clear(); _menu_order.clear(); _link.clear(); } @Override protected void onPreExecute() { super.onPreExecute(); //swipeContainer.setRefreshing(false); agahi_recycler.setVisibility(View.GONE); } @Override protected String doInBackground(String... strings) { try { String data = URLEncoder.encode("get_post", "UTF-8") + "=" + URLEncoder.encode("true", "UTF-8"); // data+="&"+ URLEncoder.encode("state_id", "UTF-8")+"="+URLEncoder.encode(state_id,"UTF-8"); data += "&" + URLEncoder.encode("lim", "UTF-8") + "=" + URLEncoder.encode(lim, "UTF-8"); // URL url = new URL(MainActivity.url + "post.php"); URLConnection connect = url.openConnection(); connect.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(connect.getOutputStream()); wr.write(data); wr.flush(); // InputStreamReader in = new InputStreamReader(connect.getInputStream()); BufferedReader reader = new BufferedReader(in); String line = ""; StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line); } return sb.toString(); } catch (Exception e) { Toast.makeText(c, "error in server", Toast.LENGTH_SHORT).show(); return "er"; } } @Override protected void onPostExecute(String s) { super.onPostExecute(s); // rotat1.stop(); //swipeContainer.setRefreshing(false); swipeContainer.post(new Runnable() { @Override public void run() { swipeContainer.setRefreshing(false); } }); agahi_recycler.setVisibility(View.VISIBLE); swipeContainer.setVisibility(View.VISIBLE); JSONArray arr=null; JSONObject ob=null; // Toast.makeText(c,s,Toast.LENGTH_SHORT).show(); try{ arr=new JSONArray(s); for(int i=0;i<arr.length();i++){ ob=arr.getJSONObject(i); _name.add(ob.getString("title")); _id.add(ob.getString("id")); _body.add(ob.getString("content")); _img.add(ob.getString("img")); _imgs.add(ob.getString("imgs")); _price.add(ob.getString("price")); _color.add(ob.getString("color")); _size.add(ob.getString("size")); _shenas.add(ob.getString("shenas")); _time.add(ob.getString("time")); _expire.add(ob.getString("expire")); _visit_today.add(ob.getString("todayvisit")); _visit_total.add(ob.getString("totalvisit")); _mobile.add(ob.getString("mobile")); _cat.add(ob.getString("cat")); _user_id.add(ob.getString("user")); _menu_order.add(ob.getString("order")); _link.add(ob.getString("link")); } final AgahiRecyclerAdapter adapter=new AgahiRecyclerAdapter(getActivity().getApplicationContext(), getActivity() ,_name ,_id, _cat, _body , _img, _imgs, _price, _size, _color, _mobile, _visit_today, _visit_total ,_expire ,_shenas ,_time ,_menu_order ,_user_id ,_link ); agahi_recycler.setAdapter(adapter); Display display = getActivity().getWindowManager().getDefaultDisplay(); DisplayMetrics outMetrics = new DisplayMetrics(); display.getMetrics(outMetrics); float density = getResources().getDisplayMetrics().density; float dpWidth = outMetrics.widthPixels / density; int columns = Math.round(dpWidth/300); final GridLayoutManager mLayoutManager = new GridLayoutManager(getActivity(),columns); agahi_recycler.setLayoutManager(mLayoutManager); agahi_recycler.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (dy < 0) { rotat2.stop(); // mTask.cancel(true); } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { int totalItemCount = mLayoutManager.getItemCount(); int lastVisibleItem = mLayoutManager.findLastVisibleItemPosition(); if (totalItemCount > 1) { if (lastVisibleItem >= totalItemCount - 1) { // End has been reached // do something limit += 6; if (limit < total && scroll == 0 && !rotat2.isStart()) { scroll = 1; mTask = new home_agahi3_server(getActivity().getApplicationContext(), getActivity(), limit + "", adapter ); mTask.executeOnExecutor(mTask.THREAD_POOL_EXECUTOR, ""); } } else { } } } }); }catch (Exception e){ //Toast.makeText(c,"errors in json",Toast.LENGTH_SHORT).show(); } } }  
    • توسط nokhbeh
      در اندورید برای رسم عکس به صورت دایره ای ویجت آماده ای نداریم.
      برای این کار از کتابخانه ی picasso استفاده میکنیم . اما این کتابخانه به تنهایی نمی تواند برای ما دایره رسم کند ولی این امکان را به ما میدهد تا با اضافه کردن کلاس های خود حالت های متفاوتی ایجاد کنیم.
      خب الان باید کتابخانه picasso رو از اینجا دانلود کنیم و به build path خود اضافه کنیم.
      حالا کلاس CircleTransform را به کلاس های خود اضافه میکنیم. این کلاس  به پیکاسو کمک میکند تا حالات دایره ای ایجاد کند.

       
      public class CircleTransform implements Transformation { public String key() { return "circle"; } public Bitmap transform(Bitmap source) { int size = Math.min(source.getWidth(), source.getHeight()); int x = (source.getWidth() - size) / 2; int y = (source.getHeight() - size) / 2; Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size); if (squaredBitmap != source) { source.recycle(); } Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig()); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); paint.setShader(shader); paint.setAntiAlias(true); float r = size / 2f; canvas.drawCircle(r, r, r, paint); squaredBitmap.recycle(); return bitmap; } }  
      حالا برای استفاده از این کلاس به مانند استفاده از پیکاسو عمل میکنیم فقط با این تفاوت که متد transform رو هم به اون اضافه میکنیم و شی جدیدی از کلاس بالا را میسازیم و برای این متد میفرستیم:
      Picasso.with(MainActivity.this).load(R.drawable.audi).transform(new CircleTransform()).into(image);  
      به جای MainActivity کلاس که درون آن هستیم رو مینویسیم به جای R.drawable.audi عکس مورد نظر خود رو میگذاریم به جای image  هم ImageView مورد نظر خود رو میگذاریم
  • فایل

×
×
  • اضافه کردن...