px in dpi

Интерфейс, диалоги, темы, стили, меню
Ответить
Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

px in dpi

Сообщение Lucifer777 » 12 мар 2014, 16:41

Здравствуйте!
Имеются картинки (качаются из интернета) 300 на 200 px. Каким образом её выводить на всех экранах одинаково?


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

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: px in dpi

Сообщение adarash » 12 мар 2014, 17:00

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

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

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

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: px in dpi

Сообщение adarash » 12 мар 2014, 17:02

А картинки подгружаются в процессе работы программы или они статичны и уже у тебя есть?

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: px in dpi

Сообщение Lucifer777 » 12 мар 2014, 17:12

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

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: px in dpi

Сообщение Lucifer777 » 12 мар 2014, 17:13

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

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

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

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: px in dpi

Сообщение adarash » 12 мар 2014, 17:37

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. Если я не прав и этот метод не правильный-то скажите как правильно. Мне тоже интересно :) .

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: px in dpi

Сообщение Lucifer777 » 13 мар 2014, 11:54

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

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: px in dpi

Сообщение altwin » 13 мар 2014, 14:14

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]
Изображение

Ответить