Fragment 生命周期
Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。官网这张图很好的说明了两者生命周期的关系:
可以看到Fragment比Activity多了几个额外的生命周期回调方法:
onAttach(Activity)
当Fragment与Activity发生关联时调用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
创建该Fragment的视图
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
onDestoryView()
与onCreateView想对应,当该Fragment的视图被移除时调用
onDetach()
与onAttach相对应,当Fragment与Activity关联被取消时调用
注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现,
Fragment
1 | public class Fragment1 extends Fragment{ |
1 | class MainActivity extends Activity{ |
帧动画
多张图片快速切换,形成动画效果
资源文件 frameanimation.xml1
2
3
4
5
6
7
8
9
10
11
12<!--false 表示会循环播放-->
<animation-list android:oneshot="false">
<item android:drawable="@drawable/pic1" android:duration="200" />
<item android:drawable="@drawable/pic2" android:duration="200" />
<item android:drawable="@drawable/pic3" android:duration="200" />
<item android:drawable="@drawable/pic4" android:duration="200" />
<item android:drawable="@drawable/pic5" android:duration="200" />
<item android:drawable="@drawable/pic6" android:duration="200" />
<item android:drawable="@drawable/pic7" android:duration="200" />
<item android:drawable="@drawable/pic8" android:duration="200" />
<item android:drawable="@drawable/pic9" android:duration="200" />
</animation-list>
1 | public class MainActivity extends Activity{ |
补间动画
组件由原始状态向终极状态转变时,为了让过渡更自然而自动生成的动画
平移动画
1 | //平移 |
缩放
1 | //缩放 |
透明
1 | public void alpha(View v){ |
旋转
1 | public void rotate(View v){ |
补间动画集合
1 | public void fly(View v){ |
属性动画:3.0 之后新特性
补间动画并没有改变控件的真实位置,只是重新绘制了界面1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54public void translate(View v){
TranslateAnimation ta = new TranslateAnimation(0, 150, 0, 0);
ta.setDuration(2000);
ta.setFillAfter(true);
imageView.startAnimation(ta);
//target: 动画作用于哪一个组件
//改变的是控件的哪一个属性
//都是经过哪些 x 坐标点
ObjectAnimator oa = ObjectAnimator.ofFloat(imageView,
"translationX", 10, 50, 20, 100);
oa.setDuration(2000);
oa.setRepeatCount(1);
oa.setRepeatMode(ValueAnimator.REVERSE);
oa.start();
}
//缩放
public void scale(View v){
ObjectAnimator oa = ObjectAnimator.ofFloat(imageView, "scaleX", 1, 1.6f, 1.2f, 2);
oa.setDuration(2000);
oa.start();
}
//透明
public void alpha(View v){
ObjectAnimator oa = ObjectAnimator.ofFloat(imageView, "alpha", 0, 0.6f, 0.2f, 1);
oa.setDuration(2000);
oa.start();
}
//旋转
public void rotate(View v){
ObjectAnimator oa = ObjectAnimator.ofFloat(imageView, "rotation", 0, 90, 180, 90, 360);
oa.setDuration(2000);
oa.start();
}
//属性动画集合
public void fly(View v){
AnimatorSet set = new AnimatorSet();
ObjectAnimator oa1 = ObjectAnimator.ofFloat(imageView, "rotation", 0, 90, 180, 90, 360);
oa1.setDuration(2000);
ObjectAnimator oa2 = ObjectAnimator.ofFloat(imageView, "alpha", 0, 0.6f, 0.2f, 1);
oa2.setDuration(2000);
//按顺序执行
set.playSequentially(oa1, oa2);
//所有动画一起执行
//set.playTogether(oa1, oa2);
set.start();
}
使用xml定义属性动画
资源文件类型:Property Animation
资源文件名 objanimator.xml1
2
3
4
5
6
7
8
9
10<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator
android:propertyName="translationX"
android:duration="2000"
android:repeatCount="1"
android:repeatMode="reverse"
android:valueFrom="-100"
android:valueTo="100"/>
</set>
1 | public void xml(View v){ |