I am making an android app in which i am trying to slide between different views using viewflipper. I took help from here. I tried experimenting with the code but I have a problem now. I have a scrollview in one of my layouts, due to which the viewflipper is not switching between the views. Can anyone please help me? This is my xml layout code with three screens to swipe through:
<?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>
The above code works perfectly fine but if i uncomment the scrollview part, the sliding does not work. This is my Activity code :
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;
}
}
I know this a common problem as in this and this but i could not find any solution.
Instead of using a scrolling TextView its better to use a ListView because ListView has scrolling enabled in it automatically. So the same code above works perfectly fine with a ListView instead of the TextView.