实现背景的变色动画

原创 2015年07月09日 15:56:26

随便点击View中的任何位置,都会启动一个动画效果成圆形慢慢扩充全屏,要实现这个效果首先我们先要自定义一个View,在View中监听到我们手指点击的位置,在根据这个位置启动一个动画,

代码如下:

import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

@SuppressLint("NewApi")
public class lightView extends View {
	private ObjectAnimator ainm1;
	private float progress;
	private int x;
	private int y;
	private int x1;
	private int y1;
	private int director;
	private int colors;
	private Paint paint;

	public lightView(Context context) {
		super(context);
	}
	//实现在布局文件中使用
	public lightView(Context context, AttributeSet attrs) {
		super(context, attrs);
		paint = new Paint(Paint.ANTI_ALIAS_FLAG);
		//属性动画
		ainm1 = ObjectAnimator.ofFloat(this, "progress", 0, 1).setDuration(500);
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		paint.setColor(colors);
		if (y < getHeight() / 2 && x > getWidth() / 2) {
			y1 = getHeight() - y;
			director = (int) Math.sqrt(x * x + y1 * y1);
		}
		if (x < getWidth() / 2 && y > getHeight() / 2) {
			x1 = getWidth() - x;
			director = (int) Math.sqrt(x1 * x1 + y * y);
		}
		if (x < getWidth() / 2 && y < getHeight() / 2) {
			y1 = getHeight() - y;
			x1 = getWidth() - x;
			director = (int) Math.sqrt(x1 * x1 + y1 * y1);
		}
		if (x > getWidth() / 2 && y > getHeight() / 2) {
			director = (int) Math.sqrt(x * x + y * y);
		}
		float r = progress * director;
		//画圆
		canvas.drawCircle(x, y, r, paint);
	}

	public void setProgress(float progress) {
		this.progress = progress;
		postInvalidate();
	}
	
	//获取点击的位置
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch (event.getAction()) {
		case MotionEvent.ACTION_UP:
			x = (int) event.getX();
			y = (int) event.getY();
			ainm1.start();
			break;
		}
		return true;
	}
}

如果要想点击其他控件来实现背景变色,首先要用RelativeLayout布局,把我们自定义这个View放在其他布局后面,然后把onTouchEvent这个方法屏蔽掉,加上下面两个方法

代码如下:

public void setColor(int color){
		colors = color;
	}
	public void start(int width, int height){
		x = width;
		y = height;
		ainm1.start();
	}

具体调用如下:

我这里是在gridView中点击其中的每一项会有不同的颜色
gridView.setOnItemClickListener(new OnItemClickListener() {// 颜色选择

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				//获取点击按钮在屏幕中的具体位置,local[0]为宽,local[1]为高
				int[] local = new int[2];
				view.getLocationInWindow(local);
				lightView.setColor(colors[position]);
				lightView.start(local[0] + view.getWidth() / 2, local[1]);
			}
		});





背景及文字渐变色闪烁动画

背景色以及文字色渐变动画

CSS+javascript 实现单击背景变色

  • 2012年02月22日 09:40
  • 961B
  • 下载

PopupWindow实现dialog效果背景变色

public class PopupWindowUtil { public static PopupWindow getPopupWindowFromBottom(final Context con...

使用css实现渐变色背景

渐变方式 线性渐变 放射性渐变 线性渐变 linear-gradient(to bottom,colorStrat,colorEnd) 第一个参数指定 渐变的方向 to bott...

[android]so easy实现根据viewpager、edittext、时间使背景动态渐变色效果~

一、前言 *本文是紧接着上文(奇思妙想之实用类ArgbEvaluator)写的。 在这简单回顾下,上文主要提到了一个叫做ArgbEvaluator的一个类,通过他可以灵活实现一些渐变色效果,虽然好...

CSS+DIV实现鼠标经过背景变色

CSS+DIV实现鼠标经过背景变色 asp.net(49) CSS(10) CSS+DIV实现鼠标经过背景变色 供稿:润之康   时间:2009-2-11 22:32:43     ...
  • csnewdn
  • csnewdn
  • 2017年01月17日 18:55
  • 140

Jquery基础_点击按钮使div背景变色_根据class_根据标签_所有都变色_一直动画_实例(二)

1 点击id为btn1的按钮,则id为one的div的样式 背景变为 特殊的绿色 $('#btn1').click(function(){ $('#one').css("backg...

UI动画架构(上下滚动,里面View可以实现动画<透明,移动,缩放,变色>l)

UI动画架构(上下滚动,里面空间可以实现动画l)

Android-利用动画实现背景逐渐变暗

  • 2016年12月15日 09:55
  • 25.93MB
  • 下载

cocos2d实现无限重复的游戏背景动画

  • 2013年09月30日 10:37
  • 13.94MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现背景的变色动画
举报原因:
原因补充:

(最多只允许输入30个字)