先来个简单的动画

来源:互联网 发布:淘宝藏族舞蹈头饰 编辑:程序博客网 时间: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图片看看吧。

如图所以会创建一个图片

左边material 风格图片,右边本地SVG图片,没有本地,给UI要

我选择material,然后点击你的图片,finish就好

然后会出来一个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 表格语法:

项目 价格 Computer $1600 Phone $12 Pipe $1

可以使用冒号来定义对齐方式:

项目 价格 数量 Computer 1600 元 5 Phone 12 元 12 Pipe 1 元 234

定义列表

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)=(n1)!nN
  • 块级公式:

x=b±b24ac2a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.0张三张三李四李四嘿,小四儿, 写博客了没?李四愣了一下,说:忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.0开始我的操作确认?结束yesno
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容. ↩
0 0
原创粉丝点击