转自
http://www.xue5.com/Mobile/Android/672426.html
import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
public class ActivityMain extends TabActivity {
private TabSpec tabSpec;
private TabHost tabHost;
private Intent intent;
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;
View.OnTouchListener gestureListener;
int currentView = 0;
private static int maxTabIndex = 2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
UtilVar.activities.add(ActivityMain.this);
this.initTableHost();
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
}
/**
* tablehost的初始化,代码完成
*/
private void initTableHost() {
tabHost = super.getTabHost();
// 歌曲列表
intent = new Intent(ActivityMain.this, ActivityList.class);
tabSpec = tabHost
.newTabSpec("歌曲列表")
.setIndicator("歌曲列表",
getResources().getDrawable(R.drawable.ic_launcher))
.setContent(intent);
tabHost.addTab(tabSpec);
// 正在播放
intent = new Intent(ActivityMain.this, ActivityPlaying.class);
tabSpec = tabHost
.newTabSpec("正在播放")
.setIndicator("正在播放",
getResources().getDrawable(R.drawable.ic_launcher))
.setContent(intent);
tabHost.addTab(tabSpec);
// 专辑列表
intent = new Intent(ActivityMain.this, ActivityLyric.class);
tabSpec = tabHost
.newTabSpec("歌词显示")
.setIndicator("歌词显示",
getResources().getDrawable(R.drawable.ic_launcher))
.setContent(intent);
tabHost.addTab(tabSpec);
// 设置当前tab
tabHost.setCurrentTab(1);
}
// 左右滑动刚好页面也有滑动效果
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
TabHost tabHost = getTabHost();
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("test", "right");
if (currentView == maxTabIndex) {
currentView = 0;
} else {
currentView++;
}
tabHost.setCurrentTab(currentView);
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("test", "left");
if (currentView == 0) {
currentView = maxTabIndex;
} else {
currentView--;
}
tabHost.setCurrentTab(currentView);
}
} catch (Exception e) {
}
return false;
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
event.setAction(MotionEvent.ACTION_CANCEL);
}
return super.dispatchTouchEvent(event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
// 主要代码就这样吧,以后就不必到处找手势跳转activity的例子了。
分享到:
相关推荐
在Android开发中,实现Activity之间的跳转通常使用Intent对象,但为了提供更加丰富的用户体验,我们可以通过手势识别器(GestureDetector)来实现用户滑动时的界面转跳。下面将详细介绍如何利用手势识别器来实现这一...
Activity跳转是Android应用中常见的操作,用于在不同的界面之间切换,实现应用的功能流转。本DEMO展示了如何在主页面(MainActivity)上设置按钮或菜单项,通过Intent对象来触发对其他Activity的启动,从而实现页面...
而"Activity左右滑动跳转功能"是一种增强用户体验的设计,让用户可以通过简单的手势操作在不同的Activity之间切换,而不是仅依赖于传统的按钮点击。这个特性常见于许多现代移动应用,特别是在那些强调流畅过渡效果和...
7. **透明和半透明效果**:通过调整Activity的窗口属性(如`android:windowBackground`、`android:alpha`等),可以创建透明或半透明的Activity,这样在跳转时可以展示底层Activity的部分内容,达到特殊视觉效果。...
`onTouchEvent()`是Activity或ViewGroup中的方法,用于接收用户的触摸操作。当用户在屏幕上滑动手指时,系统会连续发送ACTION_DOWN、ACTION_MOVE和ACTION_UP等事件。开发者需要在`onTouchEvent()`中捕获这些事件,...
在多层级的导航结构中,Activity之间的跳转构成了应用的主要流程。 **二、左滑返回的实现原理** 左滑返回的实现主要涉及手势检测和Activity栈管理。当用户在屏幕边缘滑动时,应用需要捕获这一手势,并判断其意图是...
在iOS的Swift项目中,我们可以在Storyboard中为UIImageView添加一个手势识别器(Tap Gesture Recognizer),并连接到ViewController的相应方法: ```swift @IBAction func imageTapped(_ sender: ...
如果是,那么启动一个新的Activity或者Intent,执行相应的跳转操作。这通常涉及到坐标转换,因为用户触摸屏幕的坐标需要转换成图片上的坐标,才能确定是否击中了标注。 为了提高用户体验,我们还需要考虑一些额外的...
实现跳转功能通常有两种方式:一是直接使用Intent启动新的Activity;二是通过FragmentTransaction替换当前Fragment。具体选择哪种方式取决于项目结构和需求。 **6. 自定义滑动手势** 如果默认的滑动行为不满足需求...
这涉及到Activity的onSaveInstanceState()和onRestoreInstanceState()方法的使用,以及Parcelable接口的实现,以便在Activity重建时恢复视图状态。 6. **自定义ViewGroup**:可能需要自定义一个ViewGroup,如...
8. **多Activity交互**:如果应用包含多个Activity,测试它们之间的跳转逻辑和数据传递,确保没有内存泄漏或异常抛出。 9. **权限管理**:对于需要特定权限的Activity,如访问相机、位置等,确保在权限未授予时有...
用户选择“确定”后,将跳转到`GestureEditActivity`,这是一个专门用于设置手势的活动。在这个活动中,用户可以在网格上画出自己的手势,然后保存这个手势作为密码。 ```java new AlertDialog.Builder...
- 动画可以帮助在缩放和旋转时平滑地更新图片的大小和角度,而不是立即跳转到新状态,从而增加视觉的连贯性。 5. **毕业设计与论文撰写**: - 这个项目的目的是作为毕业设计的一部分,因此在完成代码实现的同时,...
本篇文章将详细探讨“转场动画在界面跳转时实现3D跳转”的技术要点和实现方法。 首先,我们要理解什么是转场动画。转场动画是指在两个界面之间进行切换时,通过特定的动画效果来展现这种过渡,它可以使用户明确感知...
3. 将手势验证逻辑整合到启动Activity中,只有手势正确才能进入主应用界面。 五、异常处理和用户体验 1. 考虑到用户可能会忘记密码,需要提供找回密码或重置密码的机制。 2. 在密码验证失败时,应给予友好的提示,...
1. 实现原理:通常,我们使用Intent在Activity之间跳转,但在这个项目中,我们通过监听触摸事件(MotionEvent)来捕捉滑动手势。当用户在屏幕上滑动时,程序会分析滑动的方向和速度,以判断是否触发Activity的切换。...
最后,DEMO项目中的“lrcScrollDemo”可能包含了一个完整的Android工程,包括Activity、布局XML、自定义View以及解析和播放逻辑的Java类。开发者可以下载并研究这个DEMO,了解其具体的实现方式,这对于学习Android ...
- 对MediaPlayer的管理需要考虑Activity或Fragment的生命周期,确保在适当的时候初始化、释放资源,防止内存泄漏。 以上就是基于给定标题和描述中涉及的主要Android开发知识点。这个源码资源对于学习Android手势...