单个水波纹

paint的使用

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <com.itheima.wave28.MyRring
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</RelativeLayout>
package com.itheima.wave28;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class MyRring extends View{

	/**
	 * 圆环圆心的X坐标
	 */
	private int cx;

	/**
	 * 圆环圆心的Y坐标
	 */
	private int cy;

	private Paint paint;

	/**
	 * 圆环的半径
	 */
	private float radius;

	/**
	 * 线条的厚度
	 */
	private float strokeWidth;

	public MyRring(Context context, AttributeSet attrs) {
		super(context, attrs);

		initView();
	}

	private void initView() {
		//初始化paint
		paint = new Paint();
		paint.setAntiAlias(true); // 抗矩齿
		paint.setColor(Color.RED);
		paint.setStyle(Style.STROKE); //刻画,画线条  默认的是Fill状态,就是填充颜色
		paint.setStrokeWidth(strokeWidth); //设置条线的厚度
		paint.setAlpha(255); //设置透明度 ,0--255  0代表完全透明

		//
		this.radius =0;
		strokeWidth = 0;
	}

	@Override
	/**
	 * 绘制我们的内容
	 */
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);

		/**
		 * 绘制圆环
		 * 由onTouchEvent获取圆心 就是点击下去时的位置
		 */
		canvas.drawCircle(cx, cy, radius, paint);

	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		super.onTouchEvent(event);

		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN: // 点击,获得圆环的中心
			cx = (int) event.getX();
			cy = (int) event.getY();
			//初始化画笔
			initView();
			handler.sendEmptyMessage(0);
			break;
		}

		return true;
	}

	/*
	 * 刷新状态
	 */
	private void flushState() {

		this.radius+=10;
		this.strokeWidth = radius/4;
		paint.setStrokeWidth(strokeWidth);

		int nextAlpha = paint.getAlpha()-20;

		//小于20再减就负数了  所以直接等于0即可
		if(nextAlpha<=20){
			nextAlpha = 0;
		}
		paint.setAlpha(nextAlpha);

	}

	private Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {

			//刷新状态
			flushState();
			// 刷新页面 执行onDraw()方法绘制
			invalidate();

			if(paint.getAlpha() !=0){
				//第二参数是延迟时间
				handler.sendEmptyMessageDelayed(0, 100);
			}
		};
	};

	@Override
	/**
	 * 大小的测量按系统的默认规则
	 * 默认规则就是在xml布局里面定义的
	 * android:layout_width="match_parent"
     * android:layout_height="match_parent"
	 */
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}

}
时间: 2024-11-02 10:04:00

单个水波纹的相关文章

单个水波纹扩散

布局 <com.ee.MyWaveD android:layout_width="match_parent" android:layout_height="match_parent" > </com.ee.MyWaveD> 类 package com.ee; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color

三角函数之美-水波纹加载LoadingView

一.前言 学习是要总结的,最近几天学习了绘图相关的,但是使用的机会较少,现在又快要遗忘了,这次看了水波纹的绘制,觉得十分有意思,还是 把实现的方法记录下来.技术无他,为手熟尔,还是要多练习,空淡误国,实干兴邦,让我们看看今天的三角函数之美吧. 二.概述 肯定大家对中学学习的三角函数都不陌生吧,不过学习的sin.cos是超越函数一类函数,是初等函数的一种,借用维基百科的一张图: 一个完整的正弦函数应该是这样的:>y=Asin(ωx+φ)+h,A决定峰值,ω决定周期,φ表示初相位,h表示y轴的位置.

android 水波纹

public class MyWaveView extends View{ private ArrayList<Wave> list; private int[] colors = {Color.RED,Color.BLUE, Color.DKGRAY,Color.GREEN,Color.YELLOW}; public boolean isRunning = false; public MyWaveView(Context context) { this(context,null); } pu

水波纹效果

水波纹效果 Code 1.-(void)drawRect:(CGRect)rect {2. [super drawRect:rect];3. [[UIColor colorWithRed:22 / 255.0 green:163 / 255.0 blue:130 / 255.0 alpha:1] setFill];4. UIRectFill(rect);5.6. NSInteger pulsingCount = 6; // 脉冲个数7. double animationDuration = 3;

如何使用 HTML5 Canvas 制作水波纹效果

原文:如何使用 HTML5 Canvas 制作水波纹效果 今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javascript 就可以创建一个很有趣的解决功能. 在线演示      源码下载 Step 1. HTML 和以前一样,首先是 HTML 代码: <!DOCTYPE html> <html> <head> <meta

Android -- 贝塞尔实现水波纹动画(划重点!!)

1,昨天看到了一个挺好的ui效果,是使用贝塞尔曲线实现的,就和大家来分享分享,还有,在写博客的时候我经常会把自己在做某种效果时的一些问题给写出来,而不是像很多文章直接就给出了解决方法,这里给大家解释一下,这里写出我遇到的一些问题不是为了凑整片文章的字数,而是希望大家能从根源下知道它是怎么解决的,而不是你直接百度搜索这个问题解决的代码,好了,说了这么多,只是想告诉大家,我后面会在过程中提很多问题(邪恶脸,嘿嘿嘿),好吧,来看看今天的效果: 2,what is the fuck?,这就是你说的很好看

自定义view实现水波纹效果

今天看到一篇自定view 实现水波纹效果 觉得真心不错 学习之后再次写下笔记和心得.但是感觉原作者写得有些晦涩难懂,也许是本人愚笨 所以重写此作者教程.原作者博文大家可以去看下,感觉他在自定义view方面非常厉害,本文是基于此作者原文重新改写,拥有大量像相似部分 先看下效果吧: 1. 效果1: 2. 效果2 我先们来学习效果1: 效果1实现本质:用一张波形图和一个圆形图的图片,然后圆形图在波形图上方,然后使用安卓的图片遮罩模式desIn(不懂?那么先记住有这样一个遮罩模式).(只显示上部图像和下

让整个界面呈现水波纹的效果

1 #import "AppDelegate.h" 2 #import <QuartzCore/QuartzCore.h> 3 4 @interface AppDelegate () 5 @property (nonatomic ,strong)UIImageView *birdImage; 6 @end 7 8 @implementation AppDelegate 9 10 - (BOOL)application:(UIApplication *)application

水波纹(water ripple)

demo下载 水波纹,鼠标点击后水会四散,产生涟漪的感觉,十分真实. 实现原理: 扩散:当你投一块石头到水中,你会看到一个以石头入水点为圆心所形成的一圈圈的水波,这里,你可能会被这个现象所误导,以为水波上的每一点都是以石头入水点为中心向外扩散的,这是错误的.实际上,水波上的任何一点在任何时候都是以自己为圆心向四周扩散的,之所以会形成一个环状的水波,是因为水波的内部因为扩散的对称而相互 抵消了. 衰减:因为水是有阻尼的,否则,当你在水池中投入石头,水波就会永不停止的震荡下去. 水的折射:因为水波上