2010-06-13 2 views
0

У меня есть плавник:Android: ScrollView в ласт

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:id="@+id/ParentLayout" 
    xmlns:android="http://schemas.android.com/apk/res/android" style="@style/MainLayout" > 
      <LinearLayout android:id="@+id/FlipperLayout" style="@style/FlipperLayout"> 
       <ViewFlipper android:id="@+id/viewflipper" style="@style/ViewFlipper"> 
        <!--adding views to ViewFlipper--> 
        <include layout="@layout/home1" android:layout_gravity="center_horizontal" /> 
        <include layout="@layout/home2" android:layout_gravity="center_horizontal" /> 
       </ViewFlipper> 
      </LinearLayout> 
</LinearLayout> 

Первый макет, home1, состоит из зрения прокрутки. Что мне делать, чтобы отличить жестом с переворачиванием и прокруткой? В настоящее время:

  • если я удалю вид прокрутки, я могу ударить по
  • если добавить вид прокрутки, я могу только прокрутки.

Я видел предположение, что я должен переопределить onInterceptTouchEvent (MotionEvent), но я не знаю, как это сделать. Мой код, на данный момент, выглядит следующим образом:

public class HomeActivity extends Activity { 
-- declares 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    -- declares & preliminary actions 

    LinearLayout layout = (LinearLayout) findViewById(R.id.ParentLayout); 
    layout.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if (gestureDetector.onTouchEvent(event)) { 
       return true; 
      } 
      return false; 
     }}); 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    gestureDetector.onTouchEvent(event); 
    return true; 
    } 
class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    // http://www.codeshogun.com/blog/2009/04/16/how-to-implement-swipe-action-in-android/ 
    } 
} 

}

Может кто-нибудь, пожалуйста, руководство меня в правильном направлении?

спасибо.

ответ

1

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

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

Надеюсь, это было полезно!

+0

благодарственное вы за свой очень быстрый ответ. На самом деле я думал о способе захвата события движения на уровне ParentLayout (тот, который окружает флиппер), и решить на этом уровне, является ли жест горизонтальным (для учета флиппером) или вертикальный (для передачи в прокрутку). Именно поэтому onInterceptTouchEvent показался мне правильным. Так что нет способа достичь того, что я имел в виду? – Manu

+0

Возможно, я не совсем уверен, чего вы пытаетесь достичь. что такое home1 и home2, и что должен делать каждый жест? что должно делать ваше приложение? – mtmurdock

+0

Макеты home1 и home2 содержат в себе несколько кнопок изображения, каждая кнопка изображения запускает действие. home1 и home2 включены в макет, называемый home, один из которых содержит плавник. Теперь: когда пользователь перебирает все, мне нужно отобразить следующий макет дома , который делает плавник. Но так как у них много кнопок изображения, когда телефон находится в ландшафтном режиме, они не подходят на экране всем, поэтому мне нужно прокрутить макет home1. – Manu

1

В принципе, если у вас есть Scrollview в ViewFlipper, все, что вам нужно сделать, это приложить onTouchListener к ScrollView:

ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);   
    scrollView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event){ 
      if (myGestureDetector.onTouchEvent(event)){ 
       return true; 
      } 
      else{ 
       return false; 
      } 
     } 
    }); 
0

Я стараюсь так, чтобы сделать его работы:

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    scrollView.onTouchEvent(event); 
    return super.onTouchEvent(event); 
} 

@Override 
public boolean dispatchTouchEvent(MotionEvent e) 
{ 
    gestureDetector.onTouchEvent(e); 
    return super.dispatchTouchEvent(e); 
} 
Смежные вопросы