带有动画效果的滑动,大家都知道,应该使用WorkspaceView,而WorkspaceView必须使用View才能进行滑动。
那么多个Activity该如何做滑动效果呢?
其实方法很简单,就是把Activity转换为View,下面就是Activity转换为View的代码:
private View activityToView(Activity parent, Class<?> target, Bundle state) {
LocalActivityManager mLocalActivityManager = new LocalActivityManager(
parent, true);//new一个本地的activity管理器
mLocalActivityManager.dispatchCreate(state);//这个state就是当前Activity的状态参数,就是onCreate(Bundle savedInstanceState)里面这个savedInstanceState
mLocalActivityManager.dispatchResume();
mLocalActivityManager.dispatchDestroy(true);
Intent intent = new Intent(parent, target);
final Window w = mLocalActivityManager.startActivity(target.getName(),
intent);//取得一个window对象,以方便转换为View
final View wd = w != null ? w.getDecorView() : null;//转换为view
if (wd != null) {
wd.setVisibility(View.VISIBLE);
wd.setClickable(true);
wd.setFocusable(true);
wd.setFocusableInTouchMode(true);
((ViewGroup) wd)
.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
}
return wd;
}
然后定义一个WorkspaceView把所有的activity转换为View加载进去:
work = new WorkspaceView(this, null) {
@Override
public boolean onTouchEvent(MotionEvent ev) {
super.onTouchEvent(ev);
switch (ev.getAction()) {
case MotionEvent.ACTION_MOVE:
//处理移动事件
break;
case MotionEvent.ACTION_UP:
//处理action_up事件
break;
}
return true;
}
};
work.setTouchSlop(16);//设置滑动距离
// work.setBackgroundColor(getResources().getColor(R.color.main_contain_bgcolor));
//调用activityToView方法,加载所有的activity
work.addView(activityToView(this, SmartdialerActivity.class,
savedInstanceState));
work.addView(activityToView(this, MainActivity.class,
savedInstanceState));
work.addView(smsGroupView);
work.addView(activityToView(this, AutoReplyActivity.class,
savedInstanceState));
ps:重要的我用红色字体标示了