先来个简单的动画
来源:互联网 发布:淘宝藏族舞蹈头饰 编辑:程序博客网 时间:2024/06/06 09:36
先上图。没图心慌慌
有时候看到一个app的下载包在这个版本的时候还是13M多,然而突然下个版本更新升级的时候就成了3M多了。
难道程序猿偷工减料了,天杀的。肯定不是,偷工减料就会有bug。那到底是咋回事呢?
我有点莫名,但并没有深究,因为我们现在的apk就13M左右,不大也不小刚刚好。等遇到瘦身问题了在解决呗。
目测还是有一大部分和我一样的懒程序猿的,遇到问题在解决呗,防患于未然,切,谁来的那么多的精力啊。
然而,昨天接触了一个叫做vectorDrawable的东西。
唉~又是特么的么有见过的东西,还好,都麻木了。你不看,不学学的话,也许角落里的那个银分分钟就超过你了,分分钟就KO你了。
所以还是看看吧,学学吧,虽然学习的过程是痛苦的,但是当你会了一个东西的时候484有种天下的一切都是朕的的赶脚。哈哈,玩笑,玩笑而已。程序员不开玩笑的话我就在不知道什么的行业的人该开玩笑了。一定要学会开玩笑,这样才能放松心情,愉悦情绪,激活大脑,瞬间变聪明了。。艾玛,扯远了。。
话说这个叫做vectorDrawable的东西呢,到底是个啥玩意儿呢。
这个东西呢也是图片的一种。
平时用到的图片格式会有.jpg .png .gif等等的。这些图片都是日常任务啊有木有。
但是这些格式的图片有时候会有一点小问题,第一个图片有点大,第二个图片在缩放的时候容易失真。
所以SVG来代替是非常ok的,SVG是啥?SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。
概念真麻烦,真官方。我喜欢接地气的东西。就是用SVG有两个好处,第一图片资源小,第二缩放不失真。但也有一个坏处,就是哪三种格式的图片是CPU通过对像素点的绘制而画出来的,而这个SVG呢就是CPU去计算之后绘制出来的。肯定会影响性能一些。
话说一阴一阳之谓道,优势与劣势并存,去选择需要扬长避短,避重就轻就好。
先来个SVG图片看看吧。
然后会出来一个xml文件,类似于这样
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportHeight="24.0" android:viewportWidth="24.0"> <!--group标签--> <!--1,适用于多个path--> <!--2,可以使用path中所不具有的属性--> <group android:name="left"> <path android:fillColor="#FF000000" android:pathData="M9.01,14L2,14v2h7.01v3L13,15l-3.99,-4v3z" /> </group> <group android:name="right"> <path android:fillColor="#FF000000" android:pathData="M14.99,13v-3L22,10L22,8h-7.01L14.99,5L11,9l3.99,4z" /> </group></vector>
如果自己创建出来后不会是这样子,group标签的用作注释里有。
接下来,写属性动画,res下创建animator文件夹
<?xml version="1.0" encoding="utf-8"?><!--duration 动画时间--><!--repeatCount infinite 无限次重复--><!--repeatMode reverse 重复模式为抑制重复--><!--propertyName translateX 属性动画X轴平移 --><!--valueFrom="0" 从0开始平移--><!--valueTo="10" 平移到10--><!--valueType floatType 浮点型的变化类型--><objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:interpolator="@android:interpolator/overshoot" android:propertyName="translateX" android:repeatCount="infinite" android:repeatMode="reverse" android:valueFrom="0" android:valueTo="10" android:valueType="floatType"></objectAnimator>
注释比较清楚,就不多说了
因为要做一个箭头左右移动的动画,所以在拷贝一份从0到-10的值的变化就好
在接下来呢,我们把动画和图片联系在一起
<?xml version="1.0" encoding="utf-8"?><animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/arrow"> <target android:name="left" android:animation="@animator/arrow_left" /> <target android:name="right" android:animation="@animator/arrow_right" /></animated-vector>
这时候,基本动画就ok了
然后我们在main的Xml中去声明一下。
<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.scc.animscc.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" > <ImageView android:layout_width="100dp" android:layout_height="100dp" app:srcCompat="@drawable/arrow_anim" android:onClick="anim" /> </LinearLayout></ScrollView>
最后在MainActivity中配置一下
package com.scc.animscc;import android.graphics.drawable.Animatable;import android.graphics.drawable.Drawable;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.app.AppCompatDelegate;import android.view.View;import android.widget.ImageView;/** * 1,创建vectorDrawable图像 * 2,在ImageView的背景图片中跟标签导入appNs,并且background为srcCompat的属性 * 3,在vectorDrawable的图像标签中用group来包裹path * 4,创建属性动画文件夹 */public class MainActivity extends AppCompatActivity { static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void anim (View view){ ImageView imageView = (ImageView) view; Drawable drawable = imageView.getDrawable(); if (drawable instanceof Animatable){ ((Animatable) drawable).start(); } }}
快捷键
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y
Markdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。
本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考Github.
表格
Markdown Extra 表格语法:
可以使用冒号来定义对齐方式:
定义列表
- Markdown Extra 定义列表语法:
- 项目1
- 项目2
- 定义 A
- 定义 B
- 项目3
- 定义 C
定义 D
定义D内容
代码块
代码块语法遵循标准markdown代码,例如:
@requires_authorizationdef somefunc(param1='', param2=0): '''A docstring''' if param1 > param2: # interesting print 'Greater' return (param2 - param1 + 1) or Noneclass SomeClass: pass>>> message = '''interpreter... prompt'''
脚注
生成一个脚注1.
目录
用 [TOC]
来生成目录:
- 快捷键
- Markdown及扩展
- 表格
- 定义列表
- 代码块
- 脚注
- 目录
- 数学公式
- UML 图
- 离线写博客
- 浏览器兼容
数学公式
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.
- 行内公式,数学公式为:
Γ(n)=(n−1)!∀n∈N 。 - 块级公式:
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:
或者流程图:
- 关于 序列图 语法,参考 这儿,
- 关于 流程图 语法,参考 这儿.
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
- 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
- IE9以下不支持
- IE9,10,11存在以下问题
- 不支持离线功能
- IE9不支持文件导入导出
- IE10不支持拖拽文件导入
- 这里是 脚注 的 内容. ↩
- 先来个简单的动画
- 编写简单的动画
- 窗口的简单动画
- 简单的弹跳动画
- 制作简单的动画
- 简单的动画
- 简单的Tween动画
- 动画的简单介绍
- imageView简单的动画
- 简单的跌落动画
- IOS简单的动画
- 简单的动画播放
- UIView的简单动画
- WPF 简单的动画
- ios 的简单动画
- 简单的动画
- 动画的简单使用
- 动画的简单应用
- 封装框架(三)搭建框架的入口文件
- 说一说关于破解支付宝AR红包的事
- 【opencv】支付宝AR实景红包领取方法
- MVC首创(一)
- wmic 设置环境变量 不需要重启
- 先来个简单的动画
- C++枚举类型
- OpenGL学习06_顶点数组VertexArray
- OpenGL学习07_绘制立方体
- iptables详解
- Scala——函数Currying
- APK 安装过程
- vector与list的区别
- BIRT入门教程1