Как отобразить и нажать на кнопки в указанном месте на экране? - PullRequest
0 голосов
/ 07 января 2019

Я написал приложение, которое показывает 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;
}
...