У меня есть 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.
Пожалуйста, объясните, в терминах компьютерного программирования, что означает «это уменьшает качество изображения» и «оригинальное качество изображения». В частности, пожалуйста, объясните, что означало бы для масштабированной версии изображения «оригинальное качество изображения». – CommonsWare
, потому что я хочу отправить его другому мероприятию, но в другой деятельности я хочу показать полное изображение. Вы можете помочь мне, если вы посмотрите на класс ImageDownloaderTask и скажите мне, где можно изменить размер изображения рядом с сохранением оригинала? –