2010-08-09 3 views
4

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

Сначала я думал о 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 не решает проблему, потому что она только прокручивает в одном направлении. Могу ли я как-то их смешивать? Есть ли другое решение?

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

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

ответ

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; 
      } 
     }); 

    } 
+0

вам удалось поставить одну кнопку в центре экрана, например, а также создавать кнопки из ряда экран тоже? Я имею в виду, что когда вы прокручиваете изображение по бокам, вы можете видеть новые кнопки, появляющиеся (возможно, не то, что вам нужно, но меня интересует ваша проблема) – Sephy

Смежные вопросы