Set a custom style resource that will be used for resolving transit animations.
下面看一个示例:
1.主activity布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<FrameLayout
android:id="@+id/simple_fragment"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1">
</FrameLayout>
<Button android:id="@+id/new_fragment"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0"
android:text="@string/new_fragment">
<requestFocus />
</Button>
</LinearLayout>
2.主activity,包括一个fragment类:CountingFragment
public class FragmentCustomAnimations extends Activity {
int mStackLevel = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_stack);
// Watch for button clicks.
Button button = (Button)findViewById(R.id.new_fragment);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
addFragmentToStack();
}
});
if (savedInstanceState == null) {
// Do first time initialization -- add initial fragment.
Fragment newFragment = CountingFragment.newInstance(mStackLevel);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.simple_fragment, newFragment).commit();
} else {
mStackLevel = savedInstanceState.getInt("level");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("level", mStackLevel);
}
void addFragmentToStack() {
mStackLevel++;
// Instantiate a new fragment.
Fragment newFragment = CountingFragment.newInstance(mStackLevel);
// Add the fragment to the activity, pushing this transaction
// on to the back stack.
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.animator.fragment_slide_left_enter,
R.animator.fragment_slide_left_exit,
R.animator.fragment_slide_right_enter,
R.animator.fragment_slide_right_exit);
ft.replace(R.id.simple_fragment, newFragment);
ft.addToBackStack(null);
ft.commit();
}
public static class CountingFragment extends Fragment {
int mNum;
/**
* Create a new instance of CountingFragment, providing "num"
* as an argument.
*/
static CountingFragment newInstance(int num) {
CountingFragment f = new CountingFragment();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
/**
* When creating, retrieve this instance's number from its arguments.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNum = getArguments() != null ? getArguments().getInt("num") : 1;
}
/**
* The Fragment's UI is just a simple text view showing its
* instance number.
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.hello_world, container, false);
View tv = v.findViewById(R.id.text);
((TextView)tv).setText("Fragment #" + mNum);
return v;
}
}
}
2.用户fragment出入站时候的动画文件(在res/animator目录下的四个文件):
fragment_slide_left_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="100dp" android:valueTo="0dp"
android:valueType="floatType"
android:propertyName="translationX"
android:duration="@android:integer/config_mediumAnimTime" />
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="0.0" android:valueTo="1.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
fragment_slide_left_exit.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="0dp" android:valueTo="-100dp"
android:valueType="floatType"
android:propertyName="translationX"
android:duration="@android:integer/config_mediumAnimTime" />
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="1.0" android:valueTo="0.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
fragment_slide_right_enter.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="-100dp" android:valueTo="0dp"
android:valueType="floatType"
android:propertyName="translationX"
android:duration="@android:integer/config_mediumAnimTime" />
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="0.0" android:valueTo="1.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
fragment_slide_right_exit.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="0dp" android:valueTo="100dp"
android:valueType="floatType"
android:propertyName="translationX"
android:duration="@android:integer/config_mediumAnimTime" />
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="1.0" android:valueTo="0.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
相关推荐
自定义Fragment则是对系统提供的Fragment类进行扩展,以满足特定需求或实现特定功能。本篇文章将深入探讨Android自定义Fragment的相关知识点。 一、Fragment的基本概念与生命周期 Fragment作为Android应用程序中的...
此外,为了提高用户体验,可以添加动画效果,使得Fragment切换更流畅。 总的来说,使用Fragment和FragmentTabHost结合底部菜单,可以构建出用户友好、交互丰富的Android应用。这种设计模式让开发者能够灵活地组织和...
在Android中,我们可以自定义Fragment切换动画,实现进入和退出动画。这些动画可以通过FragmentTransaction的setCustomAnimation方法来设置。例如,可以设置一个淡入淡出的效果,使得当一个Fragment被添加或显示时...
在某些场景下,可能需要自定义更复杂的动画逻辑,例如,当两个Fragment同时存在时,可能需要一个过渡动画。这时,可以使用`SharedElementTransition`,这是一种特殊类型的动画,用于共享元素在两个Fragment之间的...
在FragmentTransaction中,我们可以使用`setCustomAnimations()`方法应用自定义动画。例如,当我们添加一个新的Fragment时: ```java FragmentTransaction transaction = getSupportFragmentManager().begin...
Fragment回退栈是Android系统管理Fragment的一种机制,它模拟了浏览器的后退功能,用户可以通过点击设备上的返回按钮或者程序逻辑来触发回退操作。下面将详细介绍Android Fragment回退栈的原理、使用方法以及实践中...
Android提供了多种方式来实现Fragment的动画效果,包括使用`Transaction`对象以及自定义动画。 1. **使用`FragmentManager`和`FragmentTransaction`**: 在Fragment的切换过程中,我们通常会使用`FragmentManager`...
本篇文章将详细探讨Fragment后退栈以及`add`, `remove`, `replace`这三种操作的基本使用。 首先,理解Fragment后退栈(BackStack)的概念至关重要。后退栈是Android系统用于管理Fragment状态的一种机制,它模拟了...
安卓自定义ViewGroup 自定义TextView fragment自由切换带渐变 写的demo 好多东西可以用到各种项目里 还有我写的布局 全部相对布局,完美适配各种屏幕,适合新手学习,
在这个实例中,我们将探讨如何实现一个类似于QQ界面的布局,其中`TabHost`用于切换不同`Activity`,而`ViewPager`则负责展示自定义的`Fragment`进行平滑滚动。 首先,`TabHost`是一个可以容纳多个`TabWidget`(标签...
我们可以使用`FragmentManager.beginTransaction()`方法创建一个事务,并通过`setCustomAnimation()`方法设置自定义的进入和退出动画。 例如,要实现一个简单的左右滑动动画,我们可以这样编写代码: ```java ...
最后,为了在回退栈中正确处理动画,我们需要在AndroidManifest.xml中对目标Activity添加android:allowEmbedded="true"属性,以允许其在另一个Activity中作为Fragment嵌入。 通过以上步骤,我们就可以在Activity和...
4. **自定义动画**:开发者还可以根据需求自定义动画,例如通过继承`Animator`类或实现`AnimatorListener`接口来创建复杂的动画效果。 在实际开发中,熟练掌握Fragment和动画的使用能够帮助我们构建更高级、更具有...
对于Fragment动画,可以使用`FragmentTransaction`的`setCustomAnimation()`方法设置自定义动画,参数是进入和退出动画的资源ID。 2. **帧动画(Frame Animation)**:帧动画是通过连续播放一系列静态图像来创建...
Fragment回退栈是Android开发中的一个重要概念,尤其是在处理复杂用户界面和导航时。在这个案例中,我们将深入探讨Fragment回退栈的工作原理、如何使用以及它在实际应用中的常见实践。 首先,Fragment是Android SDK...
在标题“Fragment_21种动画滑动Gesture手势触发”中,提到的核心概念是利用Gesture(手势)来实现Fragment之间的动画切换。下面我们将深入探讨Fragment、动画以及Gesture在Android中的应用。 首先,Fragment是...
8. **自定义动画**:开发者还可以通过实现`Animator`接口来自定义自己的动画效果,提供无限可能。 实现这些动画主要涉及以下几个步骤: 1. **创建动画资源**:在`res/anim`目录下创建XML动画文件,定义动画的属性...
这个过程中,`FragmentTransaction`提供了丰富的功能,不仅可以控制动画,还可以处理Fragment的生命周期和回退栈管理。通过熟练掌握这些技巧,你可以为Android应用创造出流畅、动态的界面交互。
此外,还可以通过监听Fragment的生命周期方法,比如`onCreateAnimator()`,自定义更复杂的动画效果。这需要重写`Fragment`并返回一个`Animator`对象。 总结来说,实现Fragment切换动画的关键步骤包括: 1. 创建...
- 当Fragment被添加、移除或替换时,可以自定义进入和退出动画,这可以通过在FragmentTransaction中设置setCustomAnimations()来实现。 - 对Fragment内的视图使用属性动画,例如,点击按钮后,让按钮放大并改变颜色...