в папке 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);
Посмотрите в этом направлении.
Может проще положить все в ресурсы?
Комментариев нет:
Отправить комментарий