# StatusTest **Repository Path**: nicewind/StatusTest ## Basic Information - **Project Name**: StatusTest - **Description**: 一个甚多功能的项目. - **Primary Language**: Android - **License**: Not specified - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-11-24 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #一.NDK开发流程 好文: - [NDK开发](http://www.cnblogs.com/zgqys1980/p/5478661.html) - [NDK开发](http://blog.csdn.net/u012255016/article/details/51026437) - [NDK开发](http://blog.csdn.net/yanbober/article/details/45309049/) ##1.下载NDK开发插件并配置引用路径 a.选中项目右键-->点击openModlueSetting-->配置路径 b.module的gradle中配置 ndk{ moduleName "NativeUtil" //生成的so名字(可自己进行指定) abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无(默认是全选的)。 ldLibs "log" //如果要使用log就把这个加上 } c.local.property中配置 android.useDeprecatedNdk=true ##2.创建JAVA本地方法文件,静态加载本地SO文件. static { System.loadLibrary("NativeUtil"); } public native String getStringFromC(); ##3.命令行生成h头文件.(就是要到类路径下面) cd src -->cd main/java -->javah -d ../jni -classpath . -jni com.modules.statustest.ndkdemo.NativeUtil javah ==>命令行类似javac -d ../jni ==>在上一个目录创建一个jni 文件夹 -classpath . ==>classpath执行路径。 " . " 表示相对路径 需要配置环境,或者直接指定。 -jni ==>生成命令把对应的Java文件生成头文件. com.module.status.NativeUtil ==>classes 详细解释请看: http://blog.csdn.net/zzhays/article/details/10514767 创建命令 http://www.jianshu.com/p/e689d0196a17 ##4.实现h头文件创建 .C 文件 ##5.ndk-build 生成.so文件 这里需要配置ndk的环境变量,和写Android.mk \ application.mk文件 已经配置直接CD 到jni目录 执行ndk-build 没有配置ndk环境的情况下 直接运行,so库已经存在编译包中. #二、沉浸式 直接在activity里面调用initStatus()方法,在XML的标题添加属性fitwindows=true - [沉浸式链接](http://www.open-open.com/lib/view/open1455771321605.html) **1.属性配置** 1、values: 2、values-v19: 3、values-v21: **2.代码配置** /** * 6.0完美解决半透明黑边问题 */ public void initStatus(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //当API>=21时,状态栏会自动增加一块半透明色块,这段代码将其设为透明色 Window window = getWindow(); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); } } } 最终都要设置fitwindow=true属性,不然布局会顶到statusbar的位置上面去. #三、path #四、service #五、animation #六、designsupport - [MD编程思想](http://www.cnblogs.com/mengdd/p/5641187.html) - [属性介绍]( http://www.open-open.com/lib/view/open1416663769680.html%20)(相关属性介绍) - [CollapsingToolbarLayout属性介绍]( http://www.open-open.com/lib/view/open1438265746378.html)(相关属性介绍2) #七(1)、转场动画 - [博客地址](http://blog.csdn.net/wl9739/article/details/52833668) - [activity5种方式动画讲解](http://www.jianshu.com/p/c21216bf5f82) - [转场动画讲解]( http://www.open-open.com/lib/view/open1416663769680.html) (正解) Touch feedback(触摸反馈) Reveal effect(揭露效果) Activity transitions(Activity转换效果) Curved motion(曲线运动) View state changes (视图状态改变) Animate Vector Drawables(可绘矢量动画) 一、XML配置方式 1.在res/目录下创建transition文件夹,在该文件夹下定义界面转场动画和共享元素的动画。 2.在res/value/style文件中为每个Activity指定转场动画的style并在AndroidManifest.xml文件中为每个Activity设置对应的android:theme。 3.在Activity调用startActivity()切换动画前,使用ActivityOptionsCompat来创建转场动画时的共享对象。 二、代码方式 - **swipebacklayout使用注意事项** @android:color/white true` //baseActviity中添加 mHelper = new SwipeBackActivityHelper(this); mHelper.onActivityCreate(); getWindow().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00000000"))); //实现接口 SwipeBackActivityBase @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mHelper.onPostCreate(); } @Overr public View findViewById(int id) { View v = super.findViewById(id); if (v == null && mHelper != null) return mHelper.findViewById(id); return v; } @Override public SwipeBackLayout getSwipeBackLayout() { return mHelper.getSwipeBackLayout(); } @Override public void setSwipeBackEnable(boolean enable) { getSwipeBackLayout().setEnableGesture(enable); } @Override public void scrollToFinishActivity() { Utils.convertActivityToTranslucent(this); getSwipeBackLayout().scrollToFinishActivity(); } - 1.代码给viewgroup设置item增加减少的进出动画 ScaleAnimation sa =new ScaleAnimation(0.5f, 1f, 0.5f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); sa.setDuration(2000); LayoutAnimationController lac = new LayoutAnimationController(sa, 0.5f); lac.setOrder(LayoutAnimationController.ORDER_REVERSE); rootView.setLayoutAnimation(lac); - 2.android:animateLayoutChanges="true" 表示布局中childView的的大小改变,删除,增加时的 fade in或者fade out的动画 android:layoutAnimation="@anim/listview_anim" #七(2)、水波纹 两种方式 ##1.在value-v21 下的style 文件下的 APP 的主题中设置波纹的颜色 @color/colorAccent @color/colorAccent ##2.drawable-v21 下的selector_bg.XML文件下用 ##3.在普通的drawable下的selector_bg.xml文件下用普通的selector标签或者shape等在相应的btn,tab,checkbox等空间设置 background . ##4.全局item设置点击水波纹点击 @drawable/selectable_item_background @drawable/selectable_item_background #八、权限问题设置 - [权限github地址]( https://github.com/googlesamples/easypermissions) 注意事项 1.compile 'pub.devrel:easypermissions:0.2.0' 版本以下只能用API23的编译版本,以上就要API24以上版本编译.0.3版本用API25 - 使用方法 1.实现 EasyPermissions.PermissionCallbacks 接口 2.调用EasyPermissions.requestPermissions(this, rationale, permissionRequestCode, perms); 3.实现回调 4.OK了. #九、推流,拉流播放器. - [easydarwin开源社区](http://www.easydarwin.org/) - [github地址easydarwin](https://github.com/EasyDarwin/EasyDarwin) - [bilibili-github地址](https://github.com/Bilibili/ijkplayer)