2012-02-10 6 views
1

Я делаю приложение Android, в котором я пытаюсь скользить между различными видами, используя viewflipper. Я получил помощь от here. Я попытался поэкспериментировать с кодом, но сейчас у меня проблема. У меня есть scrollview в одном из моих макетов, из-за которого viewflipper не переключается между представлениями. Кто-нибудь может мне помочь, пожалуйста! Это мой XML-код макет с тремя экранами перелистывать:Viewflipper не работает с ScrollView

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout_main" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffff" 
    android:orientation="vertical" > 

    <ViewFlipper 
     android:id="@+id/details" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="#ffffff" 
      android:orientation="vertical" > 


      <!-- <ScrollView --> 
      <!-- android:id="@+id/flotest" --> 
      <!-- android:layout_width="match_parent" --> 
      <!-- android:layout_height="match_parent" --> 
      <!-- android:background="#FFFFFF" > --> 


      <!-- <LinearLayout --> 
      <!-- android:id="@+id/LR1" --> 
      <!-- android:layout_width="match_parent" --> 
      <!-- android:layout_height="match_parent" > --> 


        <TextView 
         android:id="@+id/floText" 
         android:layout_width="fill_parent" 
         android:layout_height="fill_parent" 
         android:text="@string/flo_garbage" 
         android:textColor="#000000" /> 
<!--     </LinearLayout> --> 
<!--    </ScrollView> --> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="#ffffff" 
      android:orientation="vertical" > 

      <RelativeLayout 
       android:id="@+id/rl1" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

       <TextView 
        android:id="@+id/textView1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentLeft="true" 
        android:layout_alignParentTop="true" 
        android:text="@string/current_city" 
        android:textColor="#000000" /> 

       <ImageView 
        android:id="@+id/imageView1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true" 
        android:layout_alignParentTop="true" 
        android:src="@drawable/disclosure" /> 
      </RelativeLayout> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="#ffffff" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/floText" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:text="FRIENDS PAGE" 
       android:textColor="#000000" 
       android:textSize="50dip" /> 
     </LinearLayout> 
    </ViewFlipper> 

</LinearLayout> 

Приведенный выше код работает прекрасно, но если я раскомментировать Scrollview часть, скольжение не работает. Это мой код активность:

public class main extends Activity implements OnTouchListener { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      layMain = (LinearLayout) findViewById(R.id.layout_main); 
      layMain.setOnTouchListener((OnTouchListener) this); 

     } 

     public boolean onTouch(View arg0, MotionEvent arg1) { 

      // Get the action that was done on this touch event 
      switch (arg1.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
       // store the X value when the user's finger was pressed down 
       downXValue = arg1.getX(); 
       break; 
      } 

      case MotionEvent.ACTION_UP: { 
       // Get the X value when the user released his/her finger 
       float currentX = arg1.getX(); 

       // going backwards: pushing stuff to the right 
       if (downXValue < currentX) { 
        ViewFlipper vf = (ViewFlipper) findViewById(R.id.details); 
        vf.setInAnimation(AnimationUtils.loadAnimation(this, 
          R.anim.push_left_in)); 
        vf.setOutAnimation(AnimationUtils.loadAnimation(this, 
          R.anim.push_right_out)); 
        if (screenmiddle) { 
         vf.showNext(); 
         screenleft = true; 
         screenmiddle = false; 
         screenright = false; 
        } else if (screenright) { 
         vf.showNext(); 
         screenleft = false; 
         screenmiddle = true; 
         screenright = false; 
        } 
       } 

       // going forwards: pushing stuff to the left 
       if (downXValue > currentX) { 

        ViewFlipper vf = (ViewFlipper) findViewById(R.id.details); 

        vf.setInAnimation(AnimationUtils.loadAnimation(this, 
          R.anim.push_right_in)); 
        vf.setOutAnimation(AnimationUtils.loadAnimation(this, 
          R.anim.push_left_out)); 
        if (screenleft) { 
         vf.showPrevious(); 
         screenleft = false; 
         screenmiddle = true; 
         screenright = false; 
        } else if (screenmiddle) { 
         vf.showPrevious(); 
         screenleft = false; 
         screenmiddle = false; 
         screenright = true; 
        } 
       } 
       break; 
      } 
      } 

      // if you return false, these actions will not be recorded 
      return true; 
     } 


    } 

Я знаю, что это общая проблема, как и в this и this, но я не смог найти какое-либо решение.

ответ

0

Вместо использования прокрутки TextView лучше использовать ListView, поскольку в ListView включена прокрутка в нем автоматически. Таким образом, тот же код выше отлично работает с ListView вместо TextView.

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