package src.com;

import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;

public class ProxyDrawable extends Drawable {

private Drawable mProxy;//画图对象

public ProxyDrawable(Drawable target){//构造函数
mProxy = target;
}

public Drawable getProxy(){//获取新对象
return mProxy;
}

public void setProxy(Drawable proxy){//设置画图对象
if( proxy != this ){
mProxy = proxy;
}
}

@Override
public void draw(Canvas canvas) {//画图
if( mProxy != null ){
mProxy.draw(canvas);
}
}

@Override
public void setAlpha(int alpha) {//设置透明度
if( mProxy != null ){
mProxy.setAlpha(alpha);
}
}

@Override
public void setColorFilter(ColorFilter cf) {//设置颜色过滤
if( mProxy != null ){
mProxy.setColorFilter(cf);
}
}

@Override
public int getOpacity() {//获取透明度
//return 0;
return mProxy != null ? mProxy.getOpacity() : PixelFormat.TRANSPARENT;
}

@Override
public int getIntrinsicWidth() {//返回固有的宽度
//return super.getIntrinsicWidth();
return mProxy != null ? mProxy.getIntrinsicWidth() : -1;
}

@Override
public int getIntrinsicHeight() {//返回固有的高度
//return super.getIntrinsicHeight();
return mProxy != null ? mProxy.getIntrinsicHeight() : -1;
}

@Override
public void setDither(boolean dither) {//设置抖动
//super.setDither(dither);
if( mProxy != null ){
mProxy.setDither(dither);
}
}

@Override
public void setFilterBitmap(boolean filter) {
//super.setFilterBitmap(filter);
if( mProxy != null ){
mProxy.setDither(filter);
}
}

}

package src.com;

import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Transformation;

public class AnimateDrawable extends ProxyDrawable {
private Animation mAnimation;
private Transformation mTransformation = new Transformation();

public AnimateDrawable(Drawable target) {
super(target);
}

public AnimateDrawable(Drawable target, Animation animation){
super(target);
mAnimation = animation;
}

public Animation getAnimation() {
return mAnimation;
}

public void setAnimation(Animation anim){
mAnimation = anim;
}

public boolean hasStarted(){
return mAnimation != null && mAnimation.hasStarted();
}

public boolean hasEnded(){
return mAnimation != null && mAnimation.hasEnded();
}

@Override
public void draw(Canvas canvas) {
//super.draw(canvas);
Drawable dr = getProxy();
if( dr != null ){
int sc = canvas.save();
Animation anim = mAnimation;
if( anim != null ){
anim.getTransformation(
AnimationUtils.currentAnimationTimeMillis(),
mTransformation);
canvas.concat(mTransformation.getMatrix());
}
dr.draw(canvas);
canvas.restoreToCount(sc);
}
}

}

package src.com;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;

public class AnimationActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(new AnimationView(this));
}

private static class AnimationView extends View{
private AnimateDrawable mDrawable;

public AnimationView(Context context){
super(context);

Drawable pic = context.getResources().getDrawable(R.drawable.mountain);

pic.setBounds(0, 0, pic.getIntrinsicWidth(), pic.getIntrinsicHeight());

Animation move = new TranslateAnimation(0, 150, 0, 300);
move.setDuration(5000);
move.setRepeatCount(-1);
move.initialize(0, 0, 0, 0);

mDrawable = new AnimateDrawable(pic, move);
move.startNow();
}

@Override
protected void onDraw(Canvas canvas) {
//super.onDraw(canvas);
canvas.drawColor(Color.GREEN);
mDrawable.draw(canvas);
invalidate();
}
}

}

android的动画实例相关推荐

  1. android 属性动画实例,Android属性动画完全解析 中 ,ValueAnimator和ObjectAnimator的高级用法...

    大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了 ...

  2. android 属性动画实例,Android 属性动画Animator工具类代码案例

    代码分享-> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ packa ...

  3. android 弹幕动画,实例解析如何在Android应用中实现弹幕动画效果

    在B站或者其他视频网站看视频时,常常会打开弹幕效果,边看节目边看大家的吐槽.弹幕看起来很有意思,今天我们就来实现一个简单的弹幕效果. 从直观上,弹幕效果就是在一个ViewGroup上增加一些View, ...

  4. android高仿奇艺影视,android仿爱奇艺加载动画实例

    本篇文章介绍了android仿爱奇艺加载动画实例,具体代码如下: 效果图: 用到的知识点: Path ValueAnimator 如果对Path和ValueAnimator还不熟悉推荐去看这几个大神的 ...

  5. android 属性动画失败,AndroidAnimationExercise

    AndroidAnimationExercise 这是一个关于Android中各种View的集合,里面包含自己日常开发和博客总结中的代码. 主要内容是Android动画.Android自定义View ...

  6. android动画延迟执行,Android 过渡动画框架

    为了帮助视图层次内部和视图之间的过渡更加容易实现动画效果,Android 提供了 Transition 框架.这一套框架能够在视图之间提供一种或者多种动画过渡效果.过渡动画要解决的另一个主要问题就是对 ...

  7. Android属性动画 ObjectAnimator

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118709616 本文出自[赵彦军的博客] 文章目录 ObjectAnimator ...

  8. android属性动画作用范围,Android开发之动画效果浅析(一)

    程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animatio ...

  9. (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

    版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...

最新文章

  1. python里混淆矩阵 左下角为漏报,右上角为误报
  2. leetcode 557. 反转字符串中的单词 III(Java版)
  3. html post举例,html post请求之a标签的两种用法举例
  4. 关于Zookeeper的几个问题
  5. LNMP1.4环境中安装fileinfo插件
  6. HTTP协议 通信过程介绍
  7. websocket 连接本地端口_Spring Boot 结合 WebSocket 实现在线聊天
  8. Python如何上传文件?
  9. php网站鼠标美化,几款耐用的鼠标指针皮肤,简约清新
  10. 电力拖动计算机控制系统讲什么,电力拖动控制系统:运动控制系统
  11. [资源]世界国家中英文名称以及地区区号json格式
  12. 前端——“一看就会的”菜鸟教程网站首页制作!
  13. Python再夺冠,2020年度编程语言排行榜出炉
  14. 最长对称子串 作者 陈越单位 浙江大学
  15. 怎么解决idea中yaml无法识别或者飘红?
  16. 计算机科学与技术脑电波,科学“读心术”,当脑电波扫描图遇到人工智能
  17. 中国学位与研究生教育信息网
  18. CocoaPods添加和删除某个库
  19. 关于password导致input弹出浏览器记住密码弹框问题
  20. java打包exe实例(使用javapackager)

热门文章

  1. mysql mha配置idrac远程关机_iDRAC远程管理功能试用_戴尔 PowerEdge R810(Xeon E7520/16GB/3*146GB)_服务器评测与技术-中关村在线...
  2. java安装后启动程序在哪_java – 有没有办法在安装后使用一些“帮助应用程序”立即启动应用程序?...
  3. 钉钉打卡如何破译人脸识别_疫情常态下,如何选择合适的考勤管理系统和考勤打卡工具?...
  4. java数组的声明学号姓名线性结构_20172302 《Java软件结构与数据结构》实验一:线性结构实验报告...
  5. Total Physical Response TPR
  6. 【BZOJ3158】千钧一发,网络流之最大权闭合子图
  7. 【Tyvj1185】【codevs1296】【BZOJ1588】营业额统计,Splay练习
  8. 黑苹果16g内存够用吗_现阶段最便宜的完美黑苹果配置是什么?
  9. sdoi2015 位图+区间+矩形
  10. linux内核开启overlay,Linux-overlay启动挂载为只读或写文件异常