Android: прокручиваемый (горизонтальный и вертикальный) ImageView с наложенными кнопками - PullRequest
4 голосов
/ 09 августа 2010

Я хочу реализовать упражнение, в котором единственное, что вы видите, - это большое изображение, которое можно прокручивать по горизонтали и вертикали. Вверху этого изображения я хочу отображать кнопки, которые можно нажимать и запускать определенные действия (например, созданиенамерение начать новое действие).

Сначала я подумал о ScrollView, у которого FrameLayout в детстве.FrameLayout может иметь изображение в качестве фона и может иметь кнопки как дочерние элементы.Поскольку я точно знаю положение своих кнопок, я мог бы разместить их с абсолютными координатами.Вот мой первый код:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <FrameLayout
        android:layout_width="1298px"
        android:layout_height="945px"
        android:background="@drawable/myimage">

        <Button  
            android:id="@+id/mybutton"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_x="115px"
            android:layout_y="128px"/>

    </FrameLayout>
</ScrollView>

Проблема в том, что вы можете только прокручивать ScrollView вертикально.HorizontalScrollView не решает проблему, потому что он также прокручивает только в одном направлении.Можно их как-нибудь смешать?Есть ли другое решение?

Я обнаружил несколько похожих потоков в стеке потока, где люди помещают изображение в WebView и бесплатно получают горизонтальную / вертикальную прокрутку ( здесь ).Или кто-то поместил изображение в viewview и дал viewview onTouchListener для обработки прокрутки ( здесь ).Проблема с обоими способами заключается в том, что я так или иначе не думаю, что вы можете поместить кнопки поверх изображения, и это то, что мне нужно сделать.

Я был бы очень признателен, если бы кто-нибудь помог мне.

1 Ответ

0 голосов
/ 09 августа 2010

Использование (устарело !!!) AbsoluteLayout и предоставление его и onTouchListener решило мою проблему:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:src="@drawable/myImage"
        android:layout_width="1298px"
            android:layout_height="945px"
            android:layout_x="0px"
        android:layout_y="0px" />
    <Button  
        android:id="@+id/myButton"
        android:text="1"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_x="50px"
        android:layout_y="300px"
        android:tag="1"/>

</AbsoluteLayout>




private float mx;
    private float my;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.layout);



        final Button button = (Button)findViewById(R.id.myButton);
        button.setOnClickListener (new View.OnClickListener(){
             // OnClickAction
});


        final AbsoluteLayout switcherView = (AbsoluteLayout) this.findViewById(R.id.myLayout);

        switcherView.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View arg0, MotionEvent event) {

                float curX, curY;

                switch (event.getAction()) {

                    case MotionEvent.ACTION_DOWN:
                        mx = event.getX();
                        my = event.getY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        curX = event.getX();
                        curY = event.getY();
                        switcherView.scrollBy((int) (mx - curX), (int) (my - curY));
                        mx = curX;
                        my = curY;
                        break;
                    case MotionEvent.ACTION_UP:
                        curX = event.getX();
                        curY = event.getY();
                        switcherView.scrollBy((int) (mx - curX), (int) (my - curY));
                        break;
                }

                return true;
            }
        });

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...