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编程实现简易弹幕效果示例【附demo源码下载】

    本文实例讲述了Android编程实现简易弹幕效果.分享给大家供大家参考,具体如下: 首先上效果图,类似于360检测到骚扰电话页面: 布局很简单,上面是一个RelativeLayout,下面一个Butt ...

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

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

  3. 【转】浅析Android动画(二),属性动画高级实例探究

    2019独角兽企业重金招聘Python工程师标准>>> ObjectAnimator实现属性动画 为了写好Android动画这几篇博客,在动笔之前我是下过很大决心的,我对自己的要求是 ...

  4. Android 动画汇总-自定义动画

    为什么80%的码农都做不了架构师?>>>    android自定义动画步骤 继承Animation,重写里面的initialize和applyTransformation,在ini ...

  5. Android动画之Tween动画实战

    Android动画分为Tween动画和Frame动画,上一节通过一个实例介绍了Frame动画,本节将介绍Tween动画.Tween可以把对象进行缩小.放大.旋转和渐变等操作. Tween动画有四个主要 ...

  6. Android动画 详解(一 补间动画)

    2019独角兽企业重金招聘Python工程师标准>>> 打算整理下 android动画方面的知识,嗯  开始 一.android补间动画 分为四大类 alpha(透明度渐变).sca ...

  7. Android 动画之ScaleAnimation应用详解

    本节讲解ScaleAnimation 动画在应用中的实现,有需要的朋友可以参考下 android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画 ...

  8. Android动画开发——Animation动画效果

    动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...

  9. Android动画原理

    一.前言 Android动画包含三种:补间动画(Tween Animation),帧动画(Frame Animation),属性动画 (Property Animation).其中属性动画是从Andr ...

最新文章

  1. launch mysql_Mac Pro 开机自启动 PHP-FPM,Nginx,MySql 等软件
  2. html代码大全贴音乐,网页音乐代码大全
  3. mysql负载均衡分区_分区和负载均衡让MySQL更大更好
  4. 1.3亿豪宅被拆 抱头痛哭的房主,真实身份竟是保健品大佬,曾涉嫌传销...
  5. 启用nf_conntrack模块,避免table full dropping
  6. 给你的页面加一个百度地图
  7. 易语言制作计算软件简单步骤_基于飞时达FastTFT软件方格网法计算土方量的具体步骤...
  8. 制定自动化测试实施计划
  9. 上位机、下位机、单片机的关系
  10. 大佛顶首楞严经摄论 太虚大师著 -读记
  11. java 文件夹排序_Java 文件夹遍历与排序
  12. 计蒜客2018 ICPC SouthEastern European E. Fishermen
  13. linux下如何查看hdmi设备,如何在Linux中设置HDMI数字播放 | MOS86
  14. 画中画视频怎么制作?学会这招,让你成为短视频高手!
  15. python程序段的基本结构_python3 第三章 - 程序的基本结构
  16. Factory Method
  17. hadoop-common2.7源码分析之ProtobufRpcEngine(RPC实现)
  18. Kali 安装 Nessus 详细过程
  19. 测试人员Testlink初级使用教程
  20. 钉钉与wcp知识库集成工具

热门文章

  1. Intel MIC架构下COI框架介绍
  2. 递归查询T100的BOM
  3. 英语和汉语的十大区别
  4. 第二章:真分数理论(经典的信度理论)(二)
  5. 【冬瓜哥手绘雄文】集群文件系统架构演变终极深度梳理图解
  6. 在cdh平台上创建新用户
  7. 英语基础句型结构------起源
  8. OPPOA59S_官方线刷包_救砖包_解账户锁
  9. Windows远程桌面(xrdp+vnc)连接Ubu…
  10. 淘宝API系列开发,buyer_info买家信息,买家卖家订单官方接口