Android 如何用手指移动滑动选项卡内容(TabActivity),如;“家”&引用;新闻及;天气应用程序;?
我有一个包含三个选项卡的选项卡活动。我需要滑动动画与手指运动,就像在家里或“新闻与天气”应用程序。在文档和论坛的帮助下,我可以在某种程度上制作标签内容的动画,但不像上面提到的那样 那么,你能帮我解决这个问题吗 这是我的密码: MyTabActivity.javaAndroid 如何用手指移动滑动选项卡内容(TabActivity),如;“家”&引用;新闻及;天气应用程序;?,android,animation,android-tabhost,gesture,android-tabactivity,Android,Animation,Android Tabhost,Gesture,Android Tabactivity,我有一个包含三个选项卡的选项卡活动。我需要滑动动画与手指运动,就像在家里或“新闻与天气”应用程序。在文档和论坛的帮助下,我可以在某种程度上制作标签内容的动画,但不像上面提到的那样 那么,你能帮我解决这个问题吗 这是我的密码: MyTabActivity.java public class MyTabActivity extends TabActivity { int current_tab; TabHost tabHost; private static final
public class MyTabActivity extends TabActivity {
int current_tab;
TabHost tabHost;
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private ViewFlipper viewFlipper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mains);
viewFlipper = (ViewFlipper) findViewById(R.id.flipper);
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
slideLeftOut = AnimationUtils
.loadAnimation(this, R.anim.slide_left_out);
slideRightIn = AnimationUtils
.loadAnimation(this, R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(this,
R.anim.slide_right_out);
gestureDetector = new GestureDetector(new MyGestureDetector());
Resources res = getResources();
tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, FirstTabContentAcitivity.class);
spec = tabHost.newTabSpec("first").setIndicator("First",
res.getDrawable(R.drawable.first)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, SecondTabContentActivity.class);
spec = tabHost.newTabSpec("second").setIndicator("Second",
res.getDrawable(R.drawable.second)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, ThirdTabContentAcitivity.class);
spec = tabHost.newTabSpec("third").setIndicator("Third",
res.getDrawable(R.drawable.third)).setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.d("Gesture", "Detected inside class.");
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
//overridePendingTransition(R.anim.slide_left_in, R.anim.slide_left_out);
}
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
}
}
} catch (Exception ex) {
Log.d("onFling", ex.getMessage());
}
return false;
}
}
/*
* @Override public boolean onTouchEvent(MotionEvent event) { if
* (gestureDetector.onTouchEvent(event)) { Log.d("onTouchEvent",
* "screen touched"); return true; } else { return false; } }
*/
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
super.dispatchTouchEvent(event);
return gestureDetector.onTouchEvent(event);
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/flipper" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent" android:layout_height="fill_parent">
</FrameLayout>
</ViewFlipper>
</LinearLayout>
</TabHost>
</LinearLayout>
在.xml中向左滑动
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0"
android:duration="800" />
</set>
slide_left_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-50%p"
android:duration="800" />
</set>
在.xml中滑动\u right\u
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-50%p" android:toXDelta="0"
android:duration="800" />
</set>
slide\u right\u out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="50%p"
android:duration="800" />
</set>
用你的方法,那将是非常困难和混乱的 我认为您应该使用v4支持包中的ViewPager,它看起来很有用
下面是示例中的flingable选项卡实现 (我想这正是你想要的): 我试过了,效果很好