mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-27 11:42:16 -05:00
Add animation when switching from message list to message view
This commit is contained in:
parent
a7b90feb83
commit
b02e338b49
13
res/anim/slide_in_left.xml
Normal file
13
res/anim/slide_in_left.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<translate
|
||||
android:duration="200"
|
||||
android:fromXDelta="-50%p"
|
||||
android:toXDelta="0" />
|
||||
|
||||
<alpha
|
||||
android:duration="200"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0" />
|
||||
|
||||
</set>
|
13
res/anim/slide_in_right.xml
Normal file
13
res/anim/slide_in_right.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<translate
|
||||
android:duration="200"
|
||||
android:fromXDelta="50%p"
|
||||
android:toXDelta="0" />
|
||||
|
||||
<alpha
|
||||
android:duration="200"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0" />
|
||||
|
||||
</set>
|
13
res/anim/slide_out_left.xml
Normal file
13
res/anim/slide_out_left.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<translate
|
||||
android:duration="200"
|
||||
android:fromXDelta="0"
|
||||
android:toXDelta="-50%p" />
|
||||
|
||||
<alpha
|
||||
android:duration="200"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0" />
|
||||
|
||||
</set>
|
13
res/anim/slide_out_right.xml
Normal file
13
res/anim/slide_out_right.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<translate
|
||||
android:duration="200"
|
||||
android:fromXDelta="0"
|
||||
android:toXDelta="50%p" />
|
||||
|
||||
<alpha
|
||||
android:duration="200"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0" />
|
||||
|
||||
</set>
|
17
res/layout/message_list.xml
Normal file
17
res/layout/message_list.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.fsck.k9.view.ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/container"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent" >
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/message_list_container"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/message_view_container"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent" />
|
||||
|
||||
</com.fsck.k9.view.ViewSwitcher>
|
@ -18,7 +18,6 @@
|
||||
android:layout_width="1px"
|
||||
android:layout_height="fill_parent"
|
||||
android:background="?attr/messageListDividerColor"
|
||||
android:visibility="gone"
|
||||
tools:ignore="PxUsage" />
|
||||
|
||||
<FrameLayout
|
||||
|
@ -19,6 +19,7 @@ import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
@ -29,6 +30,7 @@ import com.actionbarsherlock.view.MenuItem;
|
||||
import com.fsck.k9.Account;
|
||||
import com.fsck.k9.Account.SortType;
|
||||
import com.fsck.k9.K9;
|
||||
import com.fsck.k9.K9.SplitViewMode;
|
||||
import com.fsck.k9.Preferences;
|
||||
import com.fsck.k9.R;
|
||||
import com.fsck.k9.activity.misc.SwipeGestureDetector.OnSwipeGestureListener;
|
||||
@ -50,6 +52,7 @@ import com.fsck.k9.search.SearchSpecification.Searchfield;
|
||||
import com.fsck.k9.search.SearchSpecification.SearchCondition;
|
||||
import com.fsck.k9.view.MessageHeader;
|
||||
import com.fsck.k9.view.MessageTitleView;
|
||||
import com.fsck.k9.view.ViewSwitcher;
|
||||
|
||||
import de.cketti.library.changelog.ChangeLog;
|
||||
|
||||
@ -148,7 +151,6 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme
|
||||
private TextView mActionBarUnread;
|
||||
private Menu mMenu;
|
||||
|
||||
private ViewGroup mMessageListContainer;
|
||||
private ViewGroup mMessageViewContainer;
|
||||
private View mMessageViewPlaceHolder;
|
||||
|
||||
@ -180,6 +182,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme
|
||||
* finish the activity.
|
||||
*/
|
||||
private boolean mMessageListWasDisplayed = false;
|
||||
private ViewSwitcher mViewSwitcher;
|
||||
|
||||
|
||||
@Override
|
||||
@ -191,7 +194,17 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme
|
||||
return;
|
||||
}
|
||||
|
||||
if (useSplitView()) {
|
||||
setContentView(R.layout.split_message_list);
|
||||
} else {
|
||||
setContentView(R.layout.message_list);
|
||||
mViewSwitcher = (ViewSwitcher) findViewById(R.id.container);
|
||||
mViewSwitcher.setAnimateFirstView(false);
|
||||
mViewSwitcher.setFirstInAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_in_left));
|
||||
mViewSwitcher.setFirstOutAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_out_right));
|
||||
mViewSwitcher.setSecondInAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_in_right));
|
||||
mViewSwitcher.setSecondOutAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_out_left));
|
||||
}
|
||||
|
||||
initializeActionBar();
|
||||
|
||||
@ -284,32 +297,23 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme
|
||||
mDisplayMode = (displayMessage) ? DisplayMode.MESSAGE_VIEW : DisplayMode.MESSAGE_LIST;
|
||||
}
|
||||
|
||||
switch (K9.getSplitViewMode()) {
|
||||
case ALWAYS: {
|
||||
if (useSplitView()) {
|
||||
mDisplayMode = DisplayMode.SPLIT_VIEW;
|
||||
break;
|
||||
}
|
||||
case NEVER: {
|
||||
// Use the value set at the beginning of this method.
|
||||
break;
|
||||
}
|
||||
case WHEN_IN_LANDSCAPE: {
|
||||
int orientation = getResources().getConfiguration().orientation;
|
||||
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||
mDisplayMode = DisplayMode.SPLIT_VIEW;
|
||||
} else if (mMessageViewFragment != null ||
|
||||
mDisplayMode == DisplayMode.MESSAGE_VIEW) {
|
||||
} else if (mMessageViewFragment != null || mDisplayMode == DisplayMode.MESSAGE_VIEW) {
|
||||
mDisplayMode = DisplayMode.MESSAGE_VIEW;
|
||||
} else {
|
||||
mDisplayMode = DisplayMode.MESSAGE_LIST;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean useSplitView() {
|
||||
SplitViewMode splitViewMode = K9.getSplitViewMode();
|
||||
int orientation = getResources().getConfiguration().orientation;
|
||||
|
||||
return (splitViewMode == SplitViewMode.ALWAYS ||
|
||||
(splitViewMode == SplitViewMode.WHEN_IN_LANDSCAPE &&
|
||||
orientation == Configuration.ORIENTATION_LANDSCAPE));
|
||||
}
|
||||
|
||||
private void initializeLayout() {
|
||||
mMessageListContainer = (ViewGroup) findViewById(R.id.message_list_container);
|
||||
mMessageViewContainer = (ViewGroup) findViewById(R.id.message_view_container);
|
||||
mMessageViewPlaceHolder = getLayoutInflater().inflate(R.layout.empty_message_view, null);
|
||||
}
|
||||
@ -326,7 +330,6 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme
|
||||
}
|
||||
case SPLIT_VIEW: {
|
||||
mMessageListWasDisplayed = true;
|
||||
findViewById(R.id.message_list_divider).setVisibility(View.VISIBLE);
|
||||
if (mMessageViewFragment == null) {
|
||||
showMessageViewPlaceHolder();
|
||||
} else {
|
||||
@ -1319,8 +1322,8 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme
|
||||
mMessageListWasDisplayed = true;
|
||||
mDisplayMode = DisplayMode.MESSAGE_LIST;
|
||||
|
||||
mMessageViewContainer.setVisibility(View.GONE);
|
||||
mMessageListContainer.setVisibility(View.VISIBLE);
|
||||
mViewSwitcher.showFirstView();
|
||||
|
||||
removeMessageViewFragment();
|
||||
mMessageListFragment.setActiveMessage(null);
|
||||
|
||||
@ -1330,8 +1333,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme
|
||||
private void showMessageView() {
|
||||
mDisplayMode = DisplayMode.MESSAGE_VIEW;
|
||||
|
||||
mMessageListContainer.setVisibility(View.GONE);
|
||||
mMessageViewContainer.setVisibility(View.VISIBLE);
|
||||
mViewSwitcher.showSecondView();
|
||||
|
||||
showMessageTitleView();
|
||||
}
|
||||
|
78
src/com/fsck/k9/view/ViewSwitcher.java
Normal file
78
src/com/fsck/k9/view/ViewSwitcher.java
Normal file
@ -0,0 +1,78 @@
|
||||
package com.fsck.k9.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.animation.Animation;
|
||||
import android.widget.ViewAnimator;
|
||||
|
||||
/**
|
||||
* A {@link ViewAnimator} that animates between two child views using different animations
|
||||
* depending on which view is displayed.
|
||||
*/
|
||||
public class ViewSwitcher extends ViewAnimator {
|
||||
private Animation mFirstInAnimation;
|
||||
private Animation mFirstOutAnimation;
|
||||
private Animation mSecondInAnimation;
|
||||
private Animation mSecondOutAnimation;
|
||||
|
||||
|
||||
public ViewSwitcher(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public ViewSwitcher(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public void showFirstView() {
|
||||
if (getDisplayedChild() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
setInAnimation(mFirstInAnimation);
|
||||
setOutAnimation(mFirstOutAnimation);
|
||||
setDisplayedChild(0);
|
||||
}
|
||||
|
||||
public void showSecondView() {
|
||||
if (getDisplayedChild() == 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
setInAnimation(mSecondInAnimation);
|
||||
setOutAnimation(mSecondOutAnimation);
|
||||
setDisplayedChild(1);
|
||||
}
|
||||
|
||||
public Animation getFirstInAnimation() {
|
||||
return mFirstInAnimation;
|
||||
}
|
||||
|
||||
public void setFirstInAnimation(Animation inAnimation) {
|
||||
this.mFirstInAnimation = inAnimation;
|
||||
}
|
||||
|
||||
public Animation getmFirstOutAnimation() {
|
||||
return mFirstOutAnimation;
|
||||
}
|
||||
|
||||
public void setFirstOutAnimation(Animation outAnimation) {
|
||||
mFirstOutAnimation = outAnimation;
|
||||
}
|
||||
|
||||
public Animation getSecondInAnimation() {
|
||||
return mSecondInAnimation;
|
||||
}
|
||||
|
||||
public void setSecondInAnimation(Animation inAnimation) {
|
||||
mSecondInAnimation = inAnimation;
|
||||
}
|
||||
|
||||
public Animation getSecondOutAnimation() {
|
||||
return mSecondOutAnimation;
|
||||
}
|
||||
|
||||
public void setSecondOutAnimation(Animation outAnimation) {
|
||||
mSecondOutAnimation = outAnimation;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user