2016-06-02 7 views
-1

У меня есть ImageView, что я получаю его содержимое с сервера, который кто-то отправил на сервер. Я хочу изменить размер фотографии, чтобы она поместилась так, как я хочу; для этого я был успешным, и я мог изменить его размер, но проблема в том, что он уменьшает качество изображения и потому что я отправляю эту фотографию в другую деятельность, поэтому мне нужно оригинальное качество изображения. Ниже я вывешу мой класс, я надеюсь, что вы мне помочь:изменение высоты и ширины изображения без потери качества

 public class welcome extends ActionBarActivity { 

    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_welcome); 

make_category_list(); 

clearCache(); 

lv = (ListView) findViewById(R.id.ads_list); 
make_all_ads_list(); 

lv.setOnScrollListener(new AbsListView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(AbsListView view, int i) { 
     if (i == 1) { 

      if (view.getId() == lv.getId()) { 
       int currentFirstVisibleItem = lv.getFirstVisiblePosition(); 
       int mLastFirstVisibleItem = lv.getLastVisiblePosition(); 

       if (currentFirstVisibleItem > mLastFirstVisibleItem) 
       { 
       } else if (currentFirstVisibleItem < mLastFirstVisibleItem) { 
        // go down 
        if (goNext == true) { 
         goNext = false; 
         make_all_ads_list(); 

         pDialog.dismiss(); 
        } 
       } 

      } 

     } 
    } 

    @Override 
    public void onScroll(AbsListView absListView, int i, int i1, int i2) 
    { 

    } 
}); 

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 

     Intent intent = new Intent(getApplicationContext(), show_full_ads.class); 
     intent.putExtra("ads", all_ads.get(position)); 
     startActivity(intent); 

    } 
}); 
    } 

    @Override 
protected void onDestroy() { 
super.onDestroy(); 

clearCache(); 
} 

public void make_all_ads_list() { 
try 
{ 

    DownloadTask dl = new DownloadTask(); 

    dl.execute(url_ads + current_page); 

    current_page++; 
} 
catch (Exception e) 
{ 
    Log.i("NaqibMessage", "error in ads Class in method make_all_ads_list -> " + e.toString()); 
} 
} 

private class DownloadTask extends AsyncTask<String, Void, String> 
{ 
@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    pDialog = new ProgressDialog(welcome.this); 
    pDialog.setMessage("درحال آماده سازی"); 
    pDialog.setCancelable(false); 
    pDialog.show(); 
} 

@Override 
protected String doInBackground(String... params) { 
    String temp = ""; 

    try { 
     JSONDownloader jd = new JSONDownloader(); 

     temp = jd.downloadURL(params[0]); 
    } 
    catch (Exception e) 
    { 
     Log.i("NaqibMessage", "error in ads Class in DownloadTask -> " + e.toString()); 
    } 
    return (temp); 
} 

@Override 
protected void onPostExecute(String s) 
{ 
    ListViewLoaderTask loader = new ListViewLoaderTask(); 
    loader.execute(s); 

    pDialog.dismiss(); 

} 
} 


    private class ListViewLoaderTask extends AsyncTask<String, Void, SimpleAdapter> { 

@Override 
protected SimpleAdapter doInBackground(String... params) 
{ 

    try 
    { 
     AdsParser parser = new AdsParser(); 
     all_ads.addAll(parser.parse(params[0])); 
    } 
    catch (Exception e) 
    { 
     Log.i("NaqibMessage", "error in ads Class in ListViewLoaderTask-> " + e.toString()); 
    } 

    String[] from = {"image", "title", "intro", "date"}; 

    int[] to = {R.id.ads_img, R.id.ads_title, R.id.ads_intro, R.id.ads_date}; 

    SimpleAdapter adb = new SimpleAdapter(getBaseContext(), all_ads, R.layout.ads_list_row, from, to); 

    return adb; 

} 

@Override 
protected void onPostExecute(SimpleAdapter adapter) { 
    lv.setAdapter(adapter); 

    for (int i = 0; i < adapter.getCount(); i++) { 
     HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(i); 

     String imgURL = (String) hm.get("image_path"); 

     HashMap<String, Object> forDownload = new HashMap<>(); 

     forDownload.put("image_path", imgURL); 
     forDownload.put("position", i); 

     ImageDownloaderTask imageDownloader = new ImageDownloaderTask(); 

     imageDownloader.execute(forDownload); 
    } 
    goNext = true; 
} 
} 


     private class ImageDownloaderTask extends AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>> { 
@Override 
protected HashMap<String, Object> doInBackground(HashMap<String, Object>... params) { 
    InputStream myStream; 

    String imgURL = (String) params[0].get("image_path"); 
    int position = (Integer) params[0].get("position"); 

    try { 
     URL url = new URL(imgURL); 

     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

     connection.setDoInput(true); 

     connection.connect(); 

     myStream = connection.getInputStream(); 

     File cacheDirectory = getBaseContext().getCacheDir(); 

     File temp = new File(cacheDirectory.getPath() + "/image_" + position + "_" + current_page + ".png"); 

     FileOutputStream outStream = new FileOutputStream(temp); 

     Bitmap b = BitmapFactory.decodeStream(myStream); 

     //Bitmap resizedBmp = Bitmap.createScaledBitmap(b, 140, 150, true); 

     b.compress(Bitmap.CompressFormat.PNG, 100, outStream); 

     outStream.flush(); 

     outStream.close(); 

     HashMap<String, Object> bitmap = new HashMap<>(); 

     bitmap.put("image", temp.getPath()); 
     bitmap.put("position", position); 

     return (bitmap); 

    } catch (Exception e) { 
     /* 
     Log.i("NaqibMessage" , "error in ads Class in ImageDownloaderTask -> " + e.toString()); 
     */ 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(HashMap<String, Object> result) { 
    String image = (String) result.get("image"); 

    int position = (Integer) result.get("position"); 

    SimpleAdapter adb = (SimpleAdapter) lv.getAdapter(); 

    HashMap<String, Object> hm = (HashMap<String, Object>) adb.getItem(position); 

    hm.put("image", image); 

    adb.notifyDataSetChanged(); 
} 
} 

public void clearCache() { 
try { 
    File[] f = getBaseContext().getCacheDir().listFiles(); 

    for (File file : f) { 
     file.delete(); 
    } 
} catch (Exception e) { 
    Log.i("NaqibMessage", "error in ads Class in ClearCache -> " + e.toString()); 

} 
} 

Я удалил ненужные коды, и вы можете видеть, что, когда я нажимаю на ListView пункте я отправить данные с ним и в последней части кода вы можете увидеть класс ImageDownloader.

+0

Пожалуйста, объясните, в терминах компьютерного программирования, что означает «это уменьшает качество изображения» и «оригинальное качество изображения». В частности, пожалуйста, объясните, что означало бы для масштабированной версии изображения «оригинальное качество изображения». – CommonsWare

+0

, потому что я хочу отправить его другому мероприятию, но в другой деятельности я хочу показать полное изображение. Вы можете помочь мне, если вы посмотрите на класс ImageDownloaderTask и скажите мне, где можно изменить размер изображения рядом с сохранением оригинала? –

ответ

0

Могу ли я изменить размер изображения рядом с оригиналом?

Да:

Шаг 1: Загрузите оригинал изображения в один файл.

Шаг №2: измените размер уже загруженного изображения, при необходимости напишите на второй файл.

+0

Можете ли вы указать, где я должен это делать в своем коде, просто проверьте мой код –

Смежные вопросы