首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
www.64222.com:OKGO调用HTTPS遇到的问题之,Activity过渡动画
发布时间:2020-03-13 22:02
浏览次数:

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/3d927a7bf020

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/399c01657920

不知道各位在用OKGO调用https接口时遇没遇到过这样的报错:

这里主要讲Android 5.x中,Google对动画效果进行的修改,主要是Activity的转场动画。

转载请标明出处:https://www.jianshu.com/p/3d927a7bf020本文出自 AWeiLoveAndroid的博客

本文同步发布在公众号Flutter那些事,欢迎大家关注。

这是由于https请求证书验证问题,直接请求一般都会失败。一般是做证书验证处理或者忽略证书验证。

Android 在5.0(API 级别 21)中提供了三种Transition 类型
  • 进入:一个进入的过渡动画决定Activity中的所有的视图怎么进入屏幕
  • 退出:一个退出的过渡动画决定一个Activity中的所有视图怎么退出屏幕
  • 共享元素:一个共享因素过渡动画决定两个Activities之间的过渡,怎么共享它们的视图
Flutter系列博文链接 ↓:

工具安装:

  • Flutter从配置安装到填坑指南详解

Flutter基础篇:

  • Flutter基础篇-- 跨平台开发框架和工具集锦
  • Flutter基础篇-- 老司机用一篇博客带你快速熟悉Dart语法
  • Flutter基础篇-- Flutter基础全面详解
  • Flutter基础篇-- Flutter填坑全面总结
  • Flutter基础篇-- Flutter代码模板,解放双手,提高开发效率必备
  • Flutter基础篇-- 水平和垂直布局详解
  • Flutter基础篇-- Flutter更新错误全面解决方案

Flutter进阶篇:

  • Flutter进阶篇-- 手把手带你快速上手调试Flutter项目
  • Flutter进阶篇-- Flutter路由详解
  • Flutter进阶篇-- Flutter 的手势(GestureDetector)分析详解
  • Flutter进阶篇-- Flutter的Future异步详解

转载请标明出处:https://www.jianshu.com/p/399c01657920本文出自 AWeiLoveAndroid的博客

OkHttpClient.Builder builder = new OkHttpClient.Builder();

其中进入和退出的效果包括:

1.explode-----从屏幕中间进入或退出,移动视图2.slide---------从屏幕边缘进入或退出,移动视图3.fade---------通过改变屏幕上视图的不透明度达到添加或移除视图

Dart语法系列博文链接 ↓:
  • Flutter基础篇-- 老司机用一篇博客带你快速熟悉Dart语法(这是Dart语法系列的第一篇)
  • Dart的语法详解系列篇-- 类与函数
  • Dart的语法详解系列篇-- mixin入门
  • Dart的语法详解系列篇-- 泛型、异步、库等有关详解

Dart语言是使用flutter框架开发时候必备的语言,flutter是一个跨平台的框架,一套代码就可以完美实现安卓和ios两个平台,适配也很不错,Dart语言很友好,和java很类似,学习成本也是很低的。所以这也是我推荐学习Dart语言的一个原因。

从本篇文章开始讲解Dart语言的基本使用,我将会连续推出好几篇文章详解,希望帮助大家快速掌握Dart语言。

本文目录:

一、注释二、关键字三、变量和常量四、特殊数据类型五、运算符六、控制流程语句七、异常

本文代码同步发布在Github: https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/projects/dart_demo

如果你使用IDEA或者Android Studio:

打开IDEA或者Android Studio,新建一个Flutter项目,然后在test目录运行我的代码;或者里面去写你自己的dart文件,然后右键run就可以运行了。(注意:需要连接手机或者模拟器)。

如果你使用vscode:

打开vscode,执行菜单栏运行,就可以了(确保只有一个dart文件,免得运行的文件不是你想要的,就很尴尬了,vscode也可以设置默认运行的文件是哪个,但是新手不建议去设置,很麻烦。因为你们想最快的运行效果,所有建议只有一个dart文件是最好的)。

Dart的注释分为3种:单行注释、多行注释、文档注释。

1、单行注释以//开头。Dart编译器会忽略//和行尾之间的所有内容。

例如:// todo:待完成

2、多行注释以/*开头,以*/结尾。介于/**/两者之间的内容会被编译器忽略(除非该注释是一个文档注释)。多行注释可以嵌套。

例如:/* todo:待完成 */

3、文档注释以///或者/**开头。可以通过dartdoc命令导出文档。

文档注释的使用,例如:/// todo:待完成

文档的导出如图所示:

www.64222.com 1文档的导出

导出的结果在我的工程根路径的/doc/api/文件夹里面,如图所示:

www.64222.com 2导出的结果

然后浏览器打开index.html就可以看到文档了。如图所示:

www.64222.com 3本地的文档

Flutter系列博文链接 ↓:

工具安装:

  • Flutter从配置安装到填坑指南详解

Flutter基础篇:

  • Flutter基础篇-- 跨平台开发框架和工具集锦
  • Flutter基础篇-- 老司机用一篇博客带你快速熟悉Dart语法
  • Flutter基础篇-- Flutter基础全面详解
  • Flutter基础篇-- Flutter填坑全面总结
  • Flutter基础篇-- Flutter代码模板,解放双手,提高开发效率必备
  • Flutter基础篇-- 水平和垂直布局详解
  • Flutter基础篇-- Flutter更新错误全面解决方案

Flutter进阶篇:

  • Flutter进阶篇-- 手把手带你快速上手调试Flutter项目
  • Flutter进阶篇-- Flutter路由详解
  • Flutter进阶篇-- Flutter 的手势(GestureDetector)分析详解
  • Flutter进阶篇-- Flutter的Future异步详解

HttpsUtils.SSLParams sslParams1 = HttpsUtils.getSslSocketFactory();

共享元素包括:

1.changeBounds -------改变目标视图的布局边界2.changeClipBounds ------裁剪目标视图边界3.changeTransform --------改变目标视图的缩放比例和旋转角度4.changeImageTransform -----改变目标图片的大小和缩放比例

33个保留字(不能使用保留字作为标识符)

关键字 - - -
if superdo switch assert
else in this enum
is throw true break
new try case extends
null typedef catch var
class false void const
final rethrow while continue
finally return with for
default - - -
Dart语法系列博文链接 ↓:
  • Flutter基础篇-- 老司机用一篇博客带你快速熟悉Dart语法(这是Dart语法系列的第一篇)
  • Dart的语法详解系列篇-- 类与函数
  • Dart的语法详解系列篇-- mixin入门
  • Dart的语法详解系列篇-- 泛型、异步、库等有关详解

在 Google I/O ’17 上,Google 向我们介绍了 Flutter —— 一款新的用于创建移动应用的开源库。

Flutter是什么呢?它是Google使用Dart语言开发的移动应用开发框架,用来帮助开发者在iOS和Android平台上开发高性能、高质量的原生应用。Flutter是跨平台的免费开源UI框架,iOS和Android可以共用一套代码

Flutter是基于Dart语言编写的。主要优点:

  1. 免费开源
  2. 利用保持状态的热重载(Hot Reload)、全新的响应式框架、丰富的控件以及集成的开发工具这些特点进行快速开发。Flutter具有热重载(Hot Reload)功能,我们编写代码时可以实时更新我们的代码而不需要重启我们的应用,大大减少了编译时间,提高了效率。
  3. 通过可组合的控件集合、丰富的动画库以及分层可扩展的架构来实现富有感染力的灵活界面设计。
  4. 快速的2D渲染引擎:Flutter不依赖于原生平台,它有自己的Skia渲染引擎,通过这个可移植的 GPU 加速的渲染引擎以及高性能本地 ARM 代码运行时,达到跨设备跨平台的高质量用户体验。

    www.64222.com 4www.64222.com 5

  5. 提高效率:使用一套代码同时开发Android和iOS。

  6. 可扩展性很强:Flutter框架本身提供了丰富的Material Design和Cupertino(iOS-flavor)风格的控件,可自由扩展控件不受手机平台控件的限制。

今年2月,Flutter推出了第一个Beta版本。这真是个好事。期待正式版早日发布。最近研究了一下Flutter,这个工具从安装到运行经历了九九八十一难,好在终于成功运行起来了。下面看一下官方的Demo在Android模拟器的运行效果图:

www.64222.com 6默认的Demo运行图

builder.sslSocketFactory(sslParams1.sSLSocketFactory, sslParams1.trustManager);

想使用这个Activity的过渡动画,几个步骤非常简单。

1.比如从ActivityA跳转到ActivityB,只需要我们把ActivityA中原来的startActivity方法改为:

 startActivity(intent, ActivityOptions.makeSceneTransitionAnimation.toBundle;

2.ActivityB中,设置的代码如下:

getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);

3.接下来我们要在ActivityB中写具体的进入的动画效果:

 getWindow().setEnterTransition(new Explode; getWindow().setEnterTransition(new Slide; getWindow().setEnterTransition(new Fade;

4.在ActivityB中设置离开ActivityB的动画效果

 getWindow().setExitTransition(new Explode; getWindow().setExitTransition(new Slide; getWindow().setExitrTransition(new Fade;

5.对于共享元素的动画效果,我们首先需要在ActivityA的布局文件中设置共享元素,给它增加相应的属性:

 android:transitionName="xxx"

6.同时在ActivityB的布局中,给要实现元素共享效果的元素也增加相同的属性

android:transitionName="xxx"

其中内置标志符有:

关键字 - - -
abstract deferred as dynamic
covariant export external factory
get implements import library
operator part set static
typedef
本文同步发布在github,更多关于Flutter的信息请点击

但是加上这段代码,某些情况还是不行(不知道是否跟服务端配置有关),继续往下解决:

这里一定要注意命名要相同

7.如果是一个共享元素,ActivityA中只需要使用如下代码就可以:

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,view,"share").toBundle;

8.如果是多个共享元素,那么可以通过Pair.create()来创建多个共享元素:

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view,"share"),Pair.create(fab,"fab")).toBundle;

ActivityA:

//设置不同动画效果 public void explode(View view){ intent = new Intent(this, Transitions.class); intent.putExtra; startActivity(intent, ActivityOptions.makeSceneTransitionAnimation.toBundle; } //设置不同动画效果 public void slide(View view){ intent = new Intent(this, Transitions.class); intent.putExtra; startActivity(intent, ActivityOptions.makeSceneTransitionAnimation.toBundle; } //设置不同动画效果 public void fade(View view){ intent = new Intent(this, Transitions.class); intent.putExtra; startActivity(intent, ActivityOptions.makeSceneTransitionAnimation.toBundle; } //设置不同动画效果 public void share(View view){ View fab = findViewById(R.id.fab_button); intent = new Intent(this, Transitions.class); intent.putExtra;// startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,view,"share").toBundle; startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view,"share"),Pair.create(fab,"fab")).toBundle; }

ActivityA的xml:

<LinearLayout xmlns:andro xmlns:tools="http://schemas.android.com/tools" android: android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="lonamessi.palettetext.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="100dp" android:onClick="explode" android:text="explode"/> <Button android:layout_width="match_parent" android:layout_height="100dp" android:onClick="slide" android:text="slide" /> <Button android:layout_width="match_parent" android:layout_height="100dp" android:onClick="fade" android:text="fade"/> <Button android:layout_width="match_parent" android:layout_height="100dp" android:transitionName="share" android:onClick="share" android:text="share"/> <Button android:layout_width="56dp" android:layout_height="56dp" android: android:transitionName="fab" android:background="@mipmap/a" android:elevation="5dp"/></LinearLayout>

ActivityB的代码:

 getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); int flag = getIntent().getExtras().getInt; switch { case 0: getWindow().setEnterTransition(new Explode; break; case 1: getWindow().setEnterTransition(new Slide; break; case 2: getWindow().setEnterTransition(new Fade; getWindow().setExitTransition(new Fade; break; case 3: break; } setContentView(R.layout.activity_transition_to); }

ActivityB的xml代码:

<RelativeLayout xmlns:andro android:layout_width="match_parent" android:layout_height="match_parent"> <View android: android:layout_width="match_parent" android:layout_height="300dp" android:transitionName="share" android:background="@color/colorPrimary"></View> <Button android:transitionName="fab" android: android:layout_width="56dp" android:layout_height="56dp" android:layout_marginRight="@dimen/activity_horizontal_margin" android:background="@mipmap/a" android:elevation="5dp" android:layout_below="@+id/holder_view" android:layout_marginTop="-26dp" android:layout_alignParentEnd="true" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="10dp" android:layout_below="@+id/holder_view"> <Button android:layout_width="match_parent" android:layout_height="60dp" android: android:layout_below="@+id/button4" android:layout_marginTop="10dp"/> <Button android:layout_width="match_parent" android:layout_height="60dp" android:layout_marginTop="10dp" android: android:layout_alignParentStart="true"/> </RelativeLayout></RelativeLayout>

其中Dart2相对于Dart1新增的,支持异步功能的关键字有:

关键字 - - -
async async* await sync*
yield yield*
https://github.com/AweiLoveAndroid/Flutter-learning

我们知道OKGO是基于OkHttp的,在OkHttp中:OkHttpClient的一个对象hostnameVerifier的一个叫verify的方法,关于HostnameVerifier是一个接口,具体可以看:Interface HostnameVerifier OkHttpClient是使用OkHostnameVerifier这个实现类的verify方法,如下:

跟java相比,Dart特有的关键字有:

关键字 - - -
deferred as assert dynamic
sync* async async* in
is await export library
external typedef factory operator
var part const rethrow
covariant set yield get
yield*
更多干货,请关注我的公众号Flutter那些事

www.64222.com 7

下面就 详细的 讲一下我的安装之路和遇到的一些问题:

@Override public boolean verify(String host, SSLSession session) {

变量的声明,可以使用 var、Object 或 dynamic 关键字。

创建变量并初始化变量实例:

 var name = '张三' ;

变量存储引用。

    1. 使用Object或dynamic关键字
 dynamic name = '张三';

调用的变量name包含对String值为“张三” 的对象的引用。name推断变量的类型是String,但可以通过指定它来更改该类型。如果对象不限于单一类型,请使用Object或dynamic关键字

 Object name = '张三'; dynamic name = '李四';
    1. 显式声明将被推断的类型

比如String,int等。

 //可以使用String显示声明字符串类型 String name = '张三' ; //代替var name = '张三';

这个类型有很多,具体在下文有介绍。

一、Flutter安装:

要安装并运行Flutter,你的开发环境必须满足这些最低要求:这里以windows系统为例(https://flutter.io/setup-windows/),macos安装文档请查看:https://flutter.io/setup-macos/linux安装文档请查看:https://flutter.io/setup-linux/

操作系统:Windows 7 SP1或更高版本

具体描述:略

磁盘空间:400 MB(不包括IDE /工具的磁盘空间)。

具体描述:略

对Android Studio的要求:需要安装3.0 或者更高的版本。

具体描述:略

Flutter支持的sdk环境:Android 4.1或者更高版本。

具体描述:略

对Android模拟器镜像的要求:推荐使用x86或者x86_64镜像。

具体描述:略

工具:Flutter需要用到以下2个工具:

try {

默认值

未初始化的变量的初始值为null,因此数字、字符串都可以调用各种方法。

 //测试 数字类型的初始值是什么? int intDefaultValue; // assert 是语言内置的断言函数,仅在检查模式下有效 // 在开发过程中, 除非条件为真,否则会引发异常。(断言失败则程序立刻终止) assert(intDefaultValue == null); print(intDefaultValue);//打印结果为null,证明数字类型初始化值是null
PowerShell 5.0或更新版本

PowerShell是微软推出的代替cmd的更方便的命令行工具,不管是win7 win8 还是win10windows系统都自带有这个命令行工具。查看PowerShell有没有安装,可以点击电脑左下角 --> 控制面板 --> 程序 --> 程序和功能,找一下PowerShell,有时候安装了也可能找不到,那就win + R,输入cmd回车,输入$PSVersionTable ,查看powershell版本。如果报错说明没有安装PowerShell,请点击powershell官网 https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-windows-powershell?view=powershell-6#upgrading-existing-windows-powershell

关于命令行无法显示某些字符或者中文乱码问题的解决:

  • 1、无法显示√或者×字符原因是点阵字体搞的鬼。设置一下控制台字体就可以了。在控制台标题右键,选择字体,把点阵字体改为其他字体就可以了。

  • 2、cmd中文乱码的解决:

1. win+R 输入regedit 进入注册表 2. 找到 `HKEY_CURRENT_USERConsole%SystemRoot%_system32_cmd.exe` 如果该项下已存在CodePage项,则把值改为十进制”65001”;如果不存在,在该项下新建一个 DWORD,命名为“CodePage”,值设为“65001” 3. 重启cmd后生效
  • 3、PowerShell中文乱码的解决:
1. win+R 输入regedit 进入注册表2. 找到 `HKEY_CURRENT_USERConsole%SystemRoot%_system32_WindowsPowerShell_v1.0_powershell.exe` 下的项。如果该项下已存在CodePage项,则把值改为十进制”65001”;如果不存在,在该项下新建一个 DWORD,命名为“CodePage”,值设为“65001”3. 重启PowerShell后生效安装好之后,运行一下看看版本号,我这边的powershell版本号相关信息如下: PSVersion 5.1.15063.1029 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.15063.1029 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1

Certificate[] certificates = session.getPeerCertificates();

Final 和 Const的用法

如果您从未打算更改一个变量,那么使用 final 或 const,不是var,也不是一个类型。一个 final 变量只能被设置一次;const 变量是一个编译时常量。(Const变量是隐式的final。)final的顶级或类变量在第一次使用时被初始化。

  • 1、被final或者const修饰的变量,变量类型可以省略。
//可以省略String这个类型声明final name1 = "张三";//final String name1 = "张三"; const name2 = "李四";//const String name2 = "李四";
  • 2、被 final 或 const 修饰的变量无法再去修改其值。
 final name1 = "张三"; // 这样写,编译器提示:a final variable, can only be set once // 一个final变量,只能被设置一次。 //name1 = "zhangsan"; const name2 = "李四"; // 这样写,编译器提示:Constant variables can't be assigned a value // const常量不能赋值 // name2 = "lisi";
  • 3、注意:flnal 或者 const 不能和 var 同时使用,
 //这样写都会报错 //final var name1 = "张三"; //const var name2 = "李四";
  • 4、常量如果是类级别的,请使用 static const
 static const speed = 100;
  • 5、常量的运算
 const speed = 100; //速度 const double distance = 2.5 * speed; // 距离 = 速度 * 时间 final speed2 = 100; //速度 final double distance2 = 2.5 * speed2; // 距离 = 速度 * 时间
  • 6、const关键字不只是声明常数变量。您也可以使用它来创建常量值,以及声明创建常量值的构造函数。 任何变量都可以有一个常量值。
 // 注意: [] 创建的是一个空的list集合 // const []创建一个空的、不可变的列表。 var varList = const []; // varList 当前是一个EIL final finalList = const []; // finalList一直是EIL const constList = const []; // constList 是一个编译时常量的EIL // 可以更改非final,非const变量的值 // 即使它曾经具有const值 varList = ["haha"]; // 不能更改final变量或const变量的值 // 这样写,编译器提示:a final variable, can only be set once // finalList = ["haha"]; // 这样写,编译器提示:Constant variables can't be assigned a value // constList = ["haha"];
  • 7、只要任何插值表达式是一个计算结果为null或数字,字符串或布尔值的编译时常量,那么文字字符串就是编译时常量。(关于$表达式和不同的数据类型后面会讲解。)
// 这些是常量字符串const aConstNum = 0;const aConstBool = true;const aConstString = 'a constant string';// 这些不是常量字符串var aNum = 0;var aBool = true;var aString = 'a string';const aConstList = const [1, 2, 3];const validConstString = '$aConstNum $aConstBool $aConstString';//这样用就会报错:Const variables must be initialized with a constant value// const常量必须用conat类型的值初始化。// const invalidConstString = '$aNum $aBool $aString $aConstList';

Dart支持以下特殊类型:

numbers 数字strings 字符串booleans 布尔lists list集合maps map集合runes 字符(用于在字符串中表示Unicode字符)

Git for Windows

使用git命令行(关于如何使用git,请查看我的博文 Git及GitHub快速入门图文全面详解):

git clone -b beta https://github.com/flutter/flutter.git

运行过程截图(这里下载的是beta版的,你也可以下载其他分支的,比如master分支):

www.64222.com 8

return verify(host, (X509Certificate) certificates[0]);

num数字类型

num是数字类型的父类,有两个子类 intdouble。num类型包括基本的运算符,如+,-,/和*,位运算符,如>>,在int类中定义。如果num和它的子类没有你要找的东西,math库可能会找到。比如你会发现abs和floor()等方法。

二、配置环境变量

} catch (SSLException e) {

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有