Страница 1 из 1

px in dpi

Добавлено: 12 мар 2014, 16:41
Lucifer777
Здравствуйте!
Имеются картинки (качаются из интернета) 300 на 200 px. Каким образом её выводить на всех экранах одинаково?


Так же приветствуются любые полезные материалы для новичков накопленные вашим не посильным трудом по вёрстке приложений.

Re: px in dpi

Добавлено: 12 мар 2014, 17:00
adarash
Lucifer777 писал(а):Здравствуйте!
Имеются картинки (качаются из интернета) 300 на 200 px. Каким образом её выводить на всех экранах одинаково?

Так же приветствуются любые полезные материалы для новичков накопленные вашим не посильным трудом по вёрстке приложений.
Одинаково все равно не получится. Можно конечно зафиксировать ImageView в процентном соотношении к размеру дисплея, но это тоже думаю, не изящное решение.

P.S. Я так заказчикам пакостил, когда они не хотели понимать, что пиксель в пиксель - это не про android.

Re: px in dpi

Добавлено: 12 мар 2014, 17:02
adarash
А картинки подгружаются в процессе работы программы или они статичны и уже у тебя есть?

Re: px in dpi

Добавлено: 12 мар 2014, 17:12
Lucifer777
adarash писал(а):А картинки подгружаются в процессе работы программы или они статичны и уже у тебя есть?
в процессе, в bitmap гружу.

Re: px in dpi

Добавлено: 12 мар 2014, 17:13
Lucifer777
adarash писал(а):
Lucifer777 писал(а):Здравствуйте!
Имеются картинки (качаются из интернета) 300 на 200 px. Каким образом её выводить на всех экранах одинаково?

Так же приветствуются любые полезные материалы для новичков накопленные вашим не посильным трудом по вёрстке приложений.
Одинаково все равно не получится. Можно конечно зафиксировать ImageView в процентном соотношении к размеру дисплея, но это тоже думаю, не изящное решение.

P.S. Я так заказчикам пакостил, когда они не хотели понимать, что пиксель в пиксель - это не про android.
покажешь как это в процентном соотношении делать?

Re: px in dpi

Добавлено: 12 мар 2014, 17:37
adarash
Lucifer777 писал(а):
adarash писал(а):А картинки подгружаются в процессе работы программы или они статичны и уже у тебя есть?
в процессе, в bitmap гружу.
1. При загрузке советую пользоваться Universal image Loader-ом.
2.

Код: Выделить всё

int w = (int) ((getWindowManager().getDefaultDisplay().getWidth()) * 0.5);
iv.setLayoutParams(new android.widget.LinearLayout.LayoutParams(
w, LayoutParams.WRAP_CONTENT));
ширина картинки теперь = 50% от экрана

Правильно ли это или нет, я не знаю. Но делал так и претензий со стороны заказчика не было и ошибок тоже.

P.S. Если я не прав и этот метод не правильный-то скажите как правильно. Мне тоже интересно :) .

Re: px in dpi

Добавлено: 13 мар 2014, 11:54
Lucifer777
adarash писал(а): P.S. Если я не прав и этот метод не правильный-то скажите как правильно. Мне тоже интересно :) .
Спасибо большое! Если найду другой способ то выложу в этой ветке.

Re: px in dpi

Добавлено: 13 мар 2014, 14:14
altwin
adarash писал(а):P.S. Если я не прав и этот метод не правильный-то скажите как правильно. Мне тоже интересно
adarash писал(а):Одинаково все равно не получится. Можно конечно зафиксировать ImageView в процентном соотношении к размеру дисплея, но это тоже думаю, не изящное решение.

P.S. Я так заказчикам пакостил, когда они не хотели понимать, что пиксель в пиксель - это не про android.
Для этих целей я использую custom ImageView, класс:
[syntax=java5]
package com.mypackegename.photoview;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;


public class SquareImageView extends ImageView {
public SquareImageView(Context context) {
super(context);
}

public SquareImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); //Snap to width
}
}
[/syntax]
layout square_image_view.xml:
[syntax=xml]
<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.mypackegename.photoview.SquareImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:scaleType="centerCrop"
/>
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:layout_gravity="bottom"
android:textColor="@android:color/white"
android:background="#55000000"/>
</FrameLayout>
[/syntax]

В результате все изображения выравниваются по шаблону, т.е. имеют одинаковый(заданный) размер отображения абсолютно не зависящий от размера экрана.
Если использовать в связке с UniversalImageLoader, то вообще удобно, в getView:
[syntax=java5]
@Override
public View getView(int position, View convertView, ViewGroup parent) {

SquareImageView imageView = new SquareImageView(mContext);

DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.cacheInMemory(true)
.cacheOnDisc(true)
.considerExifParams(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();

if (convertView == null) {
imageLoader.displayImage(photoUrls.get(position), imageView, options); // Запустили асинхронный показ картинки
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

} else {
imageView = (SquareImageView) convertView;
}

/*imageView.setImageUrl(photoUrls.get(position));*/
return imageView;
}
[/syntax]