Я написал приложение, которое показывает 3 ImageViews в указанных местах, и, нажимая на эти кнопки, пользователь может перемещаться по приложению.
Для этого сначала я использовал растровые изображения, они хорошо работали для всех типов экранов, но проблема заключалась в нехватке памяти, поэтому я изменил свой метод.
вот мой код: я помещаю ImageViews с указанным с и height (в dp) и использую метод "getArea", чтобы определить, какое изображение нажимает пользователь, проблема в том, что интерфейс приложения различается на нескольких телефонах и особенно планшетах (он не распознает щелчки)
мой вопрос: не правда ли, что "dp" не зависит от пикселей? Разве это не должно быть одинаковым на всех устройствах? каково ваше предложение в моем случае?
MainLayout:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.arghavan.lenovo.autismo.main.MainActivity">
<ImageView
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:src="@drawable/main_page_background"
/>
<ImageView
android:id="@+id/balloon"
android:layout_width="190dp"
android:layout_height="270dp"
android:scaleType="fitXY"
android:src="@drawable/main_page_balloon"
android:layout_gravity="center"
android:visibility="invisible"
/>
<ImageView
android:id="@+id/rainbow"
android:layout_width="200dp"
android:layout_height="200dp"
android:scaleType="fitXY"
android:src="@drawable/main_page_rainbow"
android:layout_gravity="top|left"
android:visibility="invisible"
/>
<ImageView
android:id="@+id/sun"
android:layout_width="150dp"
android:layout_height="150dp"
android:scaleType="fitXY"
android:src="@drawable/main_page_sun"
android:layout_gravity="top|right"
android:visibility="invisible"
/>
<Button
android:id="@+id/sound_icon"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_gravity="bottom|right"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
/>
</FrameLayout>
в MainActivity:
public void onTouch (View v, MotionEvent ev)
{
final int action = ev.getAction();
final int evX = (int) ev.getX();
final int evY = (int) ev.getY();
// If we cannot find the imageView, return.
ImageView imageView = (ImageView) v.findViewById (R.id.image);
if (imageView == null) return false;
switch (action) {
case MotionEvent.ACTION_DOWN :
int area = getArea(evX,evY);
if (area==1)
{
//do something
}
else if (area==2)
{
//do something
}
else if (area==3)
{
//do something
}
break;
default:
//do something
} // end switch
}
private int getArea(float x, float y)
{
float density = getResources().getDisplayMetrics().density;
float rx = x / density;
float ry = y / density;
if( 20< rx && rx<196 && 15<ry && ry< 159 )
return 1;
if( 86< rx && rx<293 && 138<ry && ry< 384 )
return 2;
if( 224< rx && rx<352 && 13<ry && ry< 141 )
return 3;
else
return 0;
}