android 左移动画_android旋转动画和平移动画详解,补充说一下如果制作gif动画放到csdn博客上...

先上效果图:

eb121fe056eeb90896468e55b492e7c1.gif

制作过程是先起一个模拟器,然后把GifCam的框拖到模拟器上面,点击Rec的new先,然后点击Rec,然后就save到本地成gif文件

这里做一个左右旋转,上下旋转,和左右移动的动画,先自己建立一个View的类,作为操作的对象:

public class MyView extends View {

private Paint mPaint;

int width = 0;

int height = 0;

public MyView(Context context, AttributeSet attrs) {

super(context, attrs);

mPaint = new Paint();

mPaint.setStrokeWidth(5);

mPaint.setColor(Color.RED);

this.setBackgroundColor(Color.RED);

width = context.getResources().getDimensionPixelSize(R.dimen.width);

height = context.getResources().getDimensionPixelSize(R.dimen.height);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

//width 300 height 300

canvas.drawLine(0, 0, width, 0, mPaint);

canvas.drawLine(width, 0, width, height, mPaint);

canvas.drawLine(width, height, 0, height, mPaint);

canvas.drawLine(0, height, 0, 0, mPaint);

canvas.save();

}

}

左右旋转动画:

public class RotateLeftRightAnimation extends Animation {

private final float mFromDegrees;

private final float mToDegrees;

private final float mCenterX;

private final float mCenterY;

private final float mDepthZ;

private final boolean mReverse;

private Camera mCamera;

private InterpolatedTimeListener listener;

public RotateLeftRightAnimation(float fromDegrees, float toDegrees, float centerX, float centerY, float depthZ,

boolean reverse) {

mFromDegrees = fromDegrees;

mToDegrees = toDegrees;

mCenterX = centerX;

mCenterY = centerY;

mDepthZ = depthZ;

mReverse = reverse;

}

public static interface InterpolatedTimeListener {

public void interpolatedTime(float interpolatedTime);

}

public void setInterpolatedTimeListener(InterpolatedTimeListener listener) {

this.listener = listener;

}

@Override

public void initialize(int width, int height, int parentWidth, int parentHeight) {

super.initialize(width, height, parentWidth, parentHeight);

mCamera = new Camera();

}

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

if (listener != null) {

listener.interpolatedTime(interpolatedTime);

}

final float fromDegrees = mFromDegrees;

float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);

boolean overHalf = (interpolatedTime > 0.5f);

if (overHalf) {

degrees = degrees - 180;

}

final float centerX = mCenterX;

final float centerY = mCenterY;

final Camera camera = mCamera;

final Matrix matrix = t.getMatrix();

camera.save();

if (mReverse) {

camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);

} else {

camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));

}

camera.rotateY(degrees); //这个Y轴旋转就是左右旋转

camera.getMatrix(matrix);

camera.restore();

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX, centerY);//这两句的意思是把View移到原点后旋转完再移动到现在的位置

}

}

如果是上线旋转就把camera.rotateY(degrees)改成camera.rotateX(degrees)

如果是移动的话

public class MoveAnimation extends Animation {

private Camera mCamera;

private float mMoveDistance;

private InterpolatedTimeListener listener;

public MoveAnimation(float moveDistance) {

mMoveDistance = moveDistance;

}

public static interface InterpolatedTimeListener {

public void interpolatedTime(float interpolatedTime);

}

public void setInterpolatedTimeListener(InterpolatedTimeListener listener) {

this.listener = listener;

}

@Override

public void initialize(int width, int height, int parentWidth, int parentHeight) {

super.initialize(width, height, parentWidth, parentHeight);

mCamera = new Camera();

}

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

if (listener != null) {

listener.interpolatedTime(interpolatedTime);

}

final Camera camera = mCamera;

final Matrix matrix = t.getMatrix();

camera.save();

camera.getMatrix(matrix);

camera.restore();

matrix.postTranslate(mMoveDistance, 0);

}

}

然后主程序这样来调用:

final MyView myView = (MyView) findViewById(R.id.myview);

Button btn = (Button) findViewById(R.id.btn_move);

btn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

MoveAnimation anim = new MoveAnimation(200);

anim.setDuration(500);

myView.startAnimation(anim);

}

});

Button btn_up_down_rotate = (Button) findViewById(R.id.btn_up_down_rotate);

btn_up_down_rotate.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

RotateUpDownAnimation anim = new RotateUpDownAnimation(0,

180, v.getWidth() / 2, v.getHeight() / 2, 0, false);

anim.setDuration(500);

myView.startAnimation(anim);

}

});

Button btn_left_right_rotate = (Button) findViewById(R.id.btn_left_right_rotate);

btn_left_right_rotate.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

RotateLeftRightAnimation anim = new RotateLeftRightAnimation(0,

180, v.getWidth() / 2, v.getHeight() / 2, 0, false);

anim.setDuration(500);

myView.startAnimation(anim);

}

});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vm虚拟机安装包_一次Miniconda虚拟机安装的神奇踩坑记录

本人一直都是在物理机环境下使用Anaconda,好处是提供了比较完全的机器学习包,还有方便的虚拟环境,缺点是体积太大。但如果直接用Anaconda中的根目录环境作为pycharm中的Python解释器,因为在运行程序前会不断加载根目录中的Python包…

css3弧形跑道效果_Css 实现漂亮弧形

在实现页面五花八门的有特色的ui时,我们有时会遇到要用实现一个弧形,而这样的弧形要怎么实现呢?用图片?好像不大现实,因为这样就要无故多加载一张图片了,这里我们来说说怎么用css的after伪类来实现弧形。先…

python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...

插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进、后退、左转、右转,乌龟的尾巴朝下,它移动时就会画一条线。并且为了增加乌龟画图的艺术价值…

教室信息管理系统mysql_教师信息管理系统(方式一:数据库为oracle数据库;方式二:存储在文件中)...

方式一:运行截图数据库的sql语句:/*Navicat Oracle Data TransferOracle Client Version : 12.1.0.2.0Source Server : ORCZYTSource Server Version : 120100Source Host : localhost:1521Source Schema : C##ZYTTarget Server Type : ORACLETarget Ser…

python实现xmind_Python xmind库(生成框架图)

小编在测试日常工作中遇到一个费时的问题,如何将excel中的测试用例,生成测试框架图?经过查阅发现的python xmind库 将excel中的测试用例,生成测试框架图,分为2步 1.解析excel,取出excel中数据(此…

python代码解读软件_5种带你轻松分析Python代码的软件库

通常,人们会使用两种速度来衡量某种编程语言的优劣,即:开发速度和执行速度。对于Python而言,大家往往受益的是它能够快速地编写代码,而忽略了它是否能够快速地运行,并及时完成既定的任务。因此,…

mac ssh客户端_Electerm for Mac(ssh客户端)

Electerm for Mac是一款功能强大的,作为终端或ssh / sftp客户端(类似于xshell)为一体的工具,支持多平台(linux,mac,win),还有自定义终端样式,全局/会话代理,将书签/主题/快速命令同步到github s…

armbian nginx 部署博客_通过Git将Hexo博客部署到服务器

本文首发于我的个人博客https://orxing.top,欢迎来访服务器是用的阿里云ECS CentOS,本来是用来部署WordPress的,后来接触了Hexo,就把Hexo直接部署到了GitHub pages和Coding Pages上,但是最近发现Coding pages经常抽风&…

python 字符串格式化语法_Python基础语法--字符串格式化

PS:在学习到Python的字符串格式化一些个人的总结,利用字符串格式化可以更好的对代码结果进行格式化输出语法栗子 例子中通过接收用户输入的值,赋值给sex_input和age_input生成两个变量,并根据判断输出相应的语句,and是…

springmvc跳转html_SpringMVC基础(三)

本篇文章主要整理了数据处理、乱码处理和Json的相关知识。参考的狂神说的公众号以及视频。所有代码亲测有效。数据处理主要包括处理提交的数据以及将数据显示到前端。处理提交的数据一般有三种情况:(1)提交的域的名称和方法的参数名称一致时:RequestMapp…

查看本机所有请求_【松勤教育】Fiddler抓包-只抓APP的请求

fiddler抓手机app的请求,估计大部分都会,但是如何只抓来自app的请求呢?把来自pc的请求过滤掉,因为请求太多,这样会找不到重要的信息了。环境准备:1.电脑上已装fiddler2.手机和电脑在同一局域网一、设置1.fi…

icmp报文格式_TCP/IP(二):IP报文格式详解

1. IP 报文格式0bit是指位于最左边的最高位,31bit是指位于最右边的最低位,4个字节的32bit按照 bigendian(大端格式:低字节位于高地址)字节序传输:首先是0~7bit,其次 8~15bit,然后 16~23bit,最后…

java多线程交替打印_java实现多线程交替打印

本文实例为大家分享了java实现多线程交替打印的具体代码,供大家参考,具体内容如下notifywait实现import org.junit.Test;import java.util.concurrent.*;public class TestThreadLocal {Object o new Object();CountDownLatch cnew CountDownLatch(2);T…

plot函数_时间序列:python移动窗口函数前言

一起学习,一起成长!在移动窗口(可以带有指数衰减权数)上计算的各种统计函数也是一类常见于时间序列的数组变换。它们称为移动窗口函数,其中还包括那些窗口不定长的函数(如指数加权移动平均)。跟其他统计函数一样,移动窗口函数也会…

一页纸项目管理模板_项目管理职场必备读物!这一次全部送给你!

“大圣,此去欲何?”“踏南天,碎项目。”“若一去不归...”“便一去不复返归!”hello~hello~大家好上一次找到的一篇项目管理书籍送给大家毫无意外地大家纷纷在后台留言要求我还有没有更多的书籍答应你们,这次一次性全部…

nfs需要开通什么端口_创业板开通需要什么条件?开通创业板门槛,要怎么样开通创业板?...

开通创业板需要什么条件,创业板要怎么开通?根据这两个问题进行详细分析创业板股票开通的条件和具体怎么开通,开通创业板之前必须要满足创业板开通条件。一、旧创业板开通条件就得创业板开通是非常简单的,只要满足以下两点&#xf…

java开发文档怎么写_程序员该不该写技术文档,怎么写文档,易懂又能提升自己...

最近公司项目的调用量突然涨了一大波,很多系统都纷纷扛不住了,于是需要对系统进行优化,系统优化的第一步,便是梳理业务!在这个过程中,经常出现了这样一些情况,发现数据库的某些字段,…

java矩阵类_java矩阵类,矩阵的乘法

问题如下我采用的是3重循环,先计算的列的结果,应该还可以先计算行的结果,然后求出矩阵的乘法。没有过多的技巧,就是循环的使用。相关的codepackage day20180728;import java.util.Scanner;class Matrix{private int m,n;private i…

多个for语句嵌套执行顺序_阿里真实面试题解析之实现多个线程顺序执行的几种方式...

前几天有一位同事在阿里一面的时候被问到这么一个多线程问题:如何保证多个线程的顺序执行。当时他没有回答上来,所以为了避免大家以后遇到同样的面试题还是回答不上来,今天我们就来分析解答下这个问题。问题缘由由于线程执行是靠CPU分时间片来…

java filter过滤器 网站访问量_Servlet过滤器实现网站访问计数器功能

实现网站在线访问计数器功能,网站的初始值设置为1000(1)创建CountFilter的类,实现javax。servlet.Filter接口,是一个过滤器对象,通过过滤器实现统计网站人数功能:package com.lixiyu;import java.io.IOException;impor…