Android:可滚动(水平和垂直)ImageView与按钮重叠

时间:2010-08-09 09:12:49

标签: android image button scroll

我想实现一个活动,你看到的唯一的东西是一个大图像,可以水平和垂直滚动。在该图像的顶部我想显示按钮,可以点击并触发某些动作(如创建意图开始一项新活动。)

首先,我在考虑一个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。 Horizo​​ntalScrollView无法解决问题,因为它只能向一个方向滚动。我能以某种方式混合它们吗?还有其他解决方案吗?

我在stackoverflow上发现了一些类似的线程,人们将图像放入WebView并获得免费的水平/垂直滚动(here)。或者有人将图像放在imageview中,并为imageview提供onTouchListener来处理滚动(here)。两种方式的问题是,无论哪种方式,我都不认为你可以把按钮放在图像的顶部,这是我需要做的。

如果有人帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:0)

使用(不赞成!!!)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;
            }
        });

    }