Страницы

Поиск по вопросам

среда, 19 июня 2019 г.

не получается масштабировать изображение под разные экраны

в папке assets лежит изображения, под обычные телефоны изображение норм, пробую адаптировать под планшеты и большие экраны, создал layout(large,xlarge), проставил размеры изображения, однако возникла проблема: если я ставлю у контейнера параметры wrap_content, то на маленьких экранах все ок, на больших оно мелкое, однако если ставлю match_parent ширину и высоту 350dp,550dp, то изображение растягивается по контейнеру, и становится как будто расплюченным... с параметром scaleType игрался, оно не играет влияния если параметры выставлены из последнего варианта.подскажите как быть? фото прилагаю


ссылки на изображения лежат в json файле в assets, загружаю так:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); if (savedInstanceState != null && savedInstanceState.containsKey(EXTRA_STATE_KEY)) position = savedInstanceState.getInt(EXTRA_STATE_KEY); mItem = (String) getArguments(). getSerializable(EXTRA_ITEM); LoadMediaTask loadMediaTask = new LoadMediaTask(); loadMediaTask.execute(mItem); try { mSubject = loadMediaTask.get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } }
@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(EXTRA_STATE_KEY, position); }
class LoadMediaTask extends AsyncTask {
@Override protected Subject doInBackground(String... params) { mgr = getActivity().getAssets(); ObjectMapper mapper = new ObjectMapper(); try { InputStream inputStream; inputStream = mgr.open(mItem); mSubject = mapper.readValue(inputStream, Subject.class); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } return mSubject; } }
потом метод парсит ссылки:
public void OnChangePhoto() { mp.reset(); mgr = getActivity().getAssets(); if (mSubject.content != null) { try { Uri imgUri = Uri.parse(mSubject.content.get(position).photos); iteration_Change_Question(imgUri,mImageSwitcher);
String mName = mSubject.content.get(position).signature; tv.setText(mName);
Uri soundUri = Uri.parse(mSubject.content.get(position).sounds); String sound2 = soundUri.getPath().substring("/android_asset/".length());
AssetFileDescriptor afd = getActivity().getAssets().openFd(sound2); mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); afd.close(); mp.prepare(); mp.start(); } catch (IOException e) { e.printStackTrace(); } } }
и еще метод :
public void iteration_Change_Question(Uri imgUri, ImageSwitcher view) { String stream = imgUri.getPath().substring("/android_asset/".length()); String add = "assets://" + stream; ImageLoader.getInstance().displayImage(add, new CustomViewAware(view)); }
еще класс
public class CustomViewAware extends ViewAware { public CustomViewAware(View view) { super(view); }
@Override protected void setImageDrawableInto(Drawable drawable, View view) { view.setBackgroundDrawable(drawable); }
@Override protected void setImageBitmapInto(Bitmap bitmap, View view) { view.setBackgroundDrawable(new BitmapDrawable(bitmap)); } }
попробовал делать так:
@Override protected void setImageBitmapInto(Bitmap bitmap, View view) { bitmap.setDensity(DisplayMetrics.DENSITY_MEDIUM); view.setBackgroundDrawable(new BitmapDrawable(bitmap)); }
и так :
@Override protected void setImageBitmapInto(Bitmap bitmap, View view) { bitmap.setDensity(context.getResources().getDisplayMetrics().densityDpi); view.setBackgroundDrawable(new BitmapDrawable(bitmap)); } }
но не помогает((


Ответ

Проблема, что если изображение грузится не из ресурсов, то после загрузки надо выставить правильное значение density для него.
Bitmap bmp = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); // custom density bmp.setDensity(DisplayMetrics.DENSITY_XXX); // or display density bmp.setDensity(getResources().getDisplayMetrics().densityDpi);
Посмотрите в этом направлении. Может проще положить все в ресурсы?

Комментариев нет:

Отправить комментарий