package com.neusoft.daiyy;
import com.neusoft.daiyy.R;
import android.app.TabActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.ViewFlipper;
public class MyTab extends TabActivity implements OnTabChangeListener,
OnTouchListener, OnGestureListener {
private TabHost myTabhost;
protected int myMenuSettingTag = 0;
protected Menu myMenu;
private int tabSize = 0;
private int oldTabId = -1;
// 翻页使用
private ViewFlipper mFlipper;
GestureDetector mGestureDetector;
private static final int FLING_MIN_DISTANCE = 100;
private static final int FLING_MIN_VELOCITY = 50;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myTabhost = this.getTabHost();
// get Tabhost
LayoutInflater.from(this).inflate(R.layout.main, myTabhost.getTabContentView(), true);
myTabhost.setBackgroundColor(Color.argb(150, 22, 70, 150));
myTabhost.addTab(myTabhost.newTabSpec("One").setIndicator("A", getResources().getDrawable(R.drawable.conf_artists)).setContent(R.id.widget_layout_Blue));
tabSize++;
myTabhost.addTab(myTabhost.newTabSpec("Two").setIndicator("B", getResources().getDrawable(R.drawable.conf_folder)).setContent(R.id.widget_layout_green));
tabSize++;
myTabhost.addTab(myTabhost.newTabSpec("Thr").setIndicator("C", getResources().getDrawable(R.drawable.conf_person)).setContent(R.id.widget_layout_red));
tabSize++;
mFlipper = (ViewFlipper) findViewById(R.id.flipper);
// 注册一个用于手势识别的类
mGestureDetector = new GestureDetector(this);
// 给mFlipper设置一个listener
mFlipper.setOnTouchListener(this);
// 允许长按住ViewFlipper,这样才能识别拖动等手势
mFlipper.setLongClickable(true);
}
public void animateChangeTab(int index) {
Animation slideLeftIn = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_left_in);
Animation slideLeftOut = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_left_out);
Animation slideRightIn = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_right_in);
Animation slideRightOut = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_right_out);
Log.v("newIndex", index + "");
Log.v("oldTabId", oldTabId + "");
// 定义退出效果
if (index > oldTabId) {
if (tabSize - 1 == index && oldTabId == 0) {
myTabhost.getCurrentView().startAnimation(slideRightOut);
} else {
myTabhost.getCurrentView().startAnimation(slideLeftOut);
}
} else if (index < oldTabId) {
if (0 == index && oldTabId == tabSize - 1) {
myTabhost.getCurrentView().startAnimation(slideLeftOut);
} else {
myTabhost.getCurrentView().startAnimation(slideRightOut);
}
}
myTabhost.setCurrentTab(index);
// 定义进入效果
int curTabId = myTabhost.getCurrentTab();
if (curTabId > oldTabId) {
if (tabSize - 1 == curTabId && oldTabId == 0) {
myTabhost.getCurrentView().startAnimation(slideRightIn);
} else {
myTabhost.getCurrentView().startAnimation(slideLeftIn);
}
} else if (curTabId < oldTabId) {
if (0 == curTabId && oldTabId == tabSize - 1) {
myTabhost.getCurrentView().startAnimation(slideLeftIn);
} else {
myTabhost.getCurrentView().startAnimation(slideRightIn);
}
}
Log.v("curTabId", curTabId + "");
Log.v("oldTabId", oldTabId + "");
this.oldTabId = myTabhost.getCurrentTab();
}
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
/**
* 用户按下触摸屏、快速移动后松开即触发这个事件 e1:第1个ACTION_DOWN MotionEvent e2:最后一个ACTION_MOVE
* MotionEvent velocityX:X轴上的移动速度,像素/秒 velocityY:Y轴上的移动速度,像素/秒 触发条件 :
* X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
*/
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
myMenuSettingTag++;
while (myMenuSettingTag > tabSize - 1) {
myMenuSettingTag = myMenuSettingTag - tabSize;
}
animateChangeTab(myMenuSettingTag);
} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
myMenuSettingTag--;
while (myMenuSettingTag < 0) {
myMenuSettingTag = myMenuSettingTag + tabSize;
}
animateChangeTab(myMenuSettingTag);
}
return false;
}
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
return false;
}
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
public boolean onTouch(View v, MotionEvent event) {
// 一定要将触屏事件交给手势识别类去处理(自己处理会很麻烦的)
return mGestureDetector.onTouchEvent(event);
}
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
TabHost + ViewFlipper实现滑动翻页、切换tab动画效果
共45个文件
png:18个
xml:10个
class:8个
4星 · 超过85%的资源 需积分: 10 578 下载量 152 浏览量
2011-10-20
16:02:28
上传
评论 26
收藏 153KB RAR 举报
温馨提示
历史最牛、绝对原创、代码简洁、功能强大,华丽的使用TabHost与ViewFlipper结合实现滑动翻页效果,支持tab背景图片自动切换.之前看到别人写的实现方法是重写TabHost,但是代码太繁琐。本程序虽然资源分高点儿,但绝对物超所值,下载了如有问题请站内联系。
资源推荐
资源详情
资源评论
收起资源包目录
MyTab.rar (45个子文件)
MyTab
.project 841B
proguard.cfg 1KB
src
com
neusoft
daiyy
MyTab.java 6KB
AndroidManifest.xml 600B
res
drawable-ldpi
icon.png 1KB
drawable-hdpi
icon.png 4KB
drawable
person_grey.png 1KB
notepad.png 5KB
artists.png 791B
icon.png 3KB
back_green.png 5KB
conf_folder.xml 262B
conf_artists.xml 264B
back_blue.png 5KB
manager.png 2KB
folder_grey.png 511B
gimp.png 4KB
artists_grey.png 815B
conf_person.xml 262B
back_red.png 4KB
person.png 2KB
mumule.png 4KB
manager_grey.png 2KB
folder.png 819B
drawable-mdpi
icon.png 3KB
layout
main.xml 2KB
anim
slide_right_out.xml 200B
slide_left_out.xml 201B
slide_right_in.xml 201B
slide_left_in.xml 200B
values
strings.xml 152B
assets
gen
com
neusoft
daiyy
R.java 2KB
default.properties 362B
.classpath 280B
bin
resources.ap_ 49KB
MyTab.apk 55KB
com
neusoft
daiyy
R$layout.class 391B
R$drawable.class 955B
R$attr.class 337B
MyTab.class 5KB
R$id.class 700B
R$anim.class 509B
R.class 569B
R$string.class 424B
classes.dex 8KB
共 45 条
- 1
TIGoss
- 粉丝: 6
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页