Android: ScrollView в флиппере - PullRequest
       26

Android: ScrollView в флиппере

0 голосов
/ 13 июня 2010

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

    <?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/
    }
}

}

Кто-нибудь может направить меня в правильном направлении?

Спасибо.

Ответы [ 3 ]

1 голос
/ 03 июня 2011

Обычно, если у вас есть 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;
            }
        }
    });
1 голос
/ 13 июня 2010

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

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

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

0 голосов
/ 19 декабря 2013

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

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