android简单仿android5.0点击波纹效果

android简单仿android5.0点击波纹效果 , 没啥好说的,无非就是canvas.drawCircle。有兴趣的朋友之间拿去用吧!


就贴下listview的代码吧。



package com.baodian.view;

import java.util.List;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;

public class WaterListView extends ListView{

	private float centerX , centerY ;
	private float mRevealRadius = 1 , maxRadius;
	private Paint mPaint ;
	private int count = 1;
	private WhenClickCallback l ; 
	private View itemView ;
	private int itemPosition ;
	private long itemID ;
	private Rect clipRect ;
	public WaterListView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		mPaint = new Paint() ;
		mPaint.setColor(Color.argb(88, 73, 57, 0xdc));
		mPaint.setAntiAlias(true) ;
		setSelector(new ColorDrawable(Color.TRANSPARENT)) ;
	}
	public void setWaterColor(int color){
		mPaint.setColor(color) ; 
	}
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if(event.getAction() == MotionEvent.ACTION_UP){
				centerX = event.getX() ;
				centerY = event.getY() ;
				mRevealRadius = 1 ;
		}
		return super.onTouchEvent(event);
	}

	public WaterListView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}

	public WaterListView(Context context) {
		this(context , null);
	}

	@Override
	public boolean performItemClick(View view, int position, long id) {
		itemView = view ; 
		itemPosition = position ;
		itemID = id ;
		View item = getChildAt(position - getFirstVisiblePosition());
		clipRect = new Rect(item.getLeft()	, item.getTop(), item.getLeft()+item.getWidth()	, item.getTop()+item.getHeight());
		float maxX = Math.max(centerX - item.getLeft(), item.getWidth() - centerX - item.getLeft()	);
		float maxY = Math.max(centerY -item.getTop(), item.getHeight() - centerY-  item.getTop());
		maxRadius = (float) Math.sqrt(maxX*maxX + maxY*maxY) ;
		invalidate();
		return false;
	}

	@Override
	protected void dispatchDraw(Canvas canvas) {
		super.dispatchDraw(canvas);
		if(itemView != null){
			int previewCount = count - 1 ; 
			if(mRevealRadius - previewCount*previewCount > maxRadius){
				if(count !=1){
					count = 1 ;
					invalidate() ;
					super.performItemClick(itemView, itemPosition, itemID) ;
					itemView = null ; 
					itemID  = 0 ; 
				}
				return ;
			}
			canvas.save();  
			canvas.clipRect(clipRect);  
			canvas.drawCircle(centerX, centerY, mRevealRadius , mPaint);  
			canvas.restore();  
			mRevealRadius += count*count ;
			count ++ ;
			postInvalidateDelayed(20);
		}
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值