FragmentActivity和Activity的具体区别在哪里
fragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-support-v4.jar兼容包,fragmentActivity提供了操作fragment的一些方法,其功能跟3.0及以后的版本的Activity的功能一样。
- 1、fragmentactivity 继承自activity,用来解决android3.0 之前没有fragment的api,所以在使用的时候需要导入support包,同时继承fragmentActivity,这样在activity中就能嵌入fragment来实现你想要的布局效果。
- 2、当然3.0之后你就可以直接继承自Activity,并且在其中嵌入使用fragment了。
- 3、获得Manager的方式也不同
- 3.0以下:getSupportFragmentManager()
- 3.0以上:getFragmentManager()(已弃用)
activity 转场动画
使用windowAnimation和ActivityAnimation
- windowAnimation包含
- windowEnterAnimation
- windowExitAnimation
- ActivityAnimation包含
- android:activityOpenEnterAnimation
- android:activityOpenExitAnimation
- android:activityCloseEnterAnimation
- android:activityCloseExitAnimation
- 在项目中WindowAnimation的控制权大于Activity的控制权,即在Activity转场过程中,如果同时设置了WindowAnimation和ActivityAnimation,那么 可能(因为这种情况非常多) 只会执行WindowAnimation
- 对于WindowAnimation的定义很简单,在style.xml文件中只需要继承Animation.Style即可
overridePendingTransition
- 只能紧跟startActivity和finish之后调用
xml style
在values/styles.xml下
1 2 3 4 5 6 7 8 9 10 11
| <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> <item name="android:windowAnimationStyle">@style/myActivityOutEnterAnima</item> </style>
<style name="myActivityOutEnterAnima" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/enter_from_right</item> <item name="android:activityOpenExitAnimation">@anim/out_to_left</item> <item name="android:activityCloseEnterAnimation">@anim/enter_from_left</item> <item name="android:activityCloseExitAnimation">@anim/out_to_right</item> </style>
|
最后给Application/activity配置theme选项
5.0以后 内置Activity切换动画
常用参数
- enter:用于决定第一次打开当前Activity时的动画
- exit : 用于决定退出当前Activity时的动画
- reenter: 用于决定如果当前Activity已经打开过,并且再次打开该Activity时的动画
- shared elements:用于决定在两个Activity之间切换时,指定两个Activity中对应的View的过渡效果
步骤
1.在setContentView()之前
执行,用于告诉Window页面切换需要使用动画接下来就是加载切换动画
1
| getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
|
2.加载切换动画
1 2 3
| Transition explode = TransitionInflater .from(this) .inflateTransition(R.transition.explode);
|
3.告诉Window,当前的Activity在什么情况下使用上面的动画
1 2 3
| getWindow().setExitTransition(explode); getWindow().setEnterTransition(explode); getWindow().setReenterTransition(explode);
|
或者在主题中添加
1 2 3
| <item name="android:windowExitTransition">@transition/explode</item> <item name="android:windowEnterTransition">@transition/explode</item> <item name="android:windowReenterTransition">@transition/explode</item>
|
4.调用startActivity时,将Transition变成bundle
1
| startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
|
使用内置动画
在res/transition目录下,新建xml文件
1 2 3
| <explode xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" />
|
1 2 3 4 5 6
| <slide xmlns:android="http://schemas.android.com/apk/res/android" android:slideEdge="end" android:duration="300" />
|
如果不希望状态栏,导航栏跟随一起执行动画,可以添加 target excludeId
1 2 3 4 5 6 7 8 9
| <slide xmlns:android="http://schemas.android.com/apk/res/android" android:slideEdge="end" android:duration="300"> <target android:excludeId="@android:id/navigationBarBackground"/> <target android:excludeId="@android:id/statusBarBackground"/> </slide>
|
1 2 3
| <fade xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" />
|
sharedElement效果
共享元素效果,与前面几种效果不同的是,共享元素效果是将前面一个Activity的某个子View与后面一个Activity的某个子View之间有过渡效果
1.将两个Activity中需要过渡的View加上Android:transitionName属性
两个View的android:transitionName属性取值要一致
2.调用startActivity,makeTransitionAnimation时添加第二个参数–第一个Activity中的view对象,第三个参数–transitionName
1
| startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, SharedView, "TransitionName").toBundle())
|
添加多个view同时具有Transition过度切换效果
把SharedView和TransitionName组成一个Pair,依次穿给makeSceneTransitionAnimation
1 2 3
| Pair first = new Pair<>(firstSharedView, ViewCompat.getTransitionName(firstSharedView)); Pair second = new Pair<>(secondSharedView, ViewCompat.getTransitionName(secondSharedView)); ActivityOptionsCompat.makeSceneTransitionAnimation(activity, first, second);
|
自定义过渡动画轨迹路径
1.创建一个View的过渡移动的轨迹路径PathMotion类
- 我们可以创建ArcMotion对象,ArcMotion是PathMotion子类,是个曲线路径。想要了解更多ArcMotion可以查看:
- ArcMotion官方文档
2.定义ChangeBounds类
我们自定义一个继承ChangeBounds的类,主要重写createAnimator函数,即创建你要执行的动画。这个函数由3个参数:
-
ViewGroup sceneRoot
:屏幕根View,即DecorView,第二个Activity的DecorView。
-
TransitionValues startValues
:属性动画的起始属性值,TransitionValues 对象内部有各Map类型的属性values,用于保存需要执行属性动画的属性。这个里面的属性值是在函数captureStartValues里放置,因此你可以重写captureStartValues
函数,并把你自定义的属性动画中的属性放进去。
-
TransitionValues endValues
:与startValues类似,表示属性动画结束时的属性值。可以通过重写captureEndValues
函数,并把你自定义的属性动画里面的最终属性值放进去。
自动弹起软键盘
1 2 3 4 5 6 7 8 9 10 11
| window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) et.postDelayed({ runOnUiThread { et.isFocusable = true et.isFocusableInTouchMode = true et.requestFocus() et.findFocus() val inputManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputManager.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT) } },300)
|
代码混淆
application 初始化减少
log 必须加debug
viewbinding
海外工作注意事项
- 海外app开发时不能连公司wifi,必须断网,或者用4g
- 不会的东西自己解决不了,大胆和同事请教和同事协调时间和进度。
心态上