Skip to content

yfchu/RippleView

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RippleView

按钮的波纹效果

image

		//xml
		<com.yfchu.app.customview.RippleView
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:text="Click me"
        android:background="@drawable/bc"
        app:ripple_alpha="1.0"
        app:ripple_color="#50000000" />
	//attrs
	<declare-styleable name="RippleView">
        <attr name="ripple_color" format="color"/>
        <attr name="ripple_alpha" format="float"/>
    </declare-styleable>
	@Override
    public boolean onTouchEvent(MotionEvent event) {
        mDownX = event.getX();
        mDownY = event.getY();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mPaint.setAlpha(100);
                setmRadius(dp(50));
                break;
            case MotionEvent.ACTION_MOVE:
                setmRadius(dp(50));
                break;
            case MotionEvent.ACTION_UP:
                ValueAnimator valueAnimator = ValueAnimator.ofFloat(mRadius, getWidth());
                valueAnimator.setDuration(300).start();
                valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator valueAnimator) {
                        mRadius = (float) valueAnimator.getAnimatedValue();
                        invalidate();
                    }
                });
                ValueAnimator valueAnimator1 = ValueAnimator.ofInt(mPaint.getAlpha(), 0);
                valueAnimator1.setDuration(300).start();
                valueAnimator1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator valueAnimator) {
                        mPaint.setAlpha((Integer) valueAnimator.getAnimatedValue());
                        invalidate();
                    }
                });
                break;
        }
        return super.onTouchEvent(event);
    }
	
	//根据半径重绘
	private void setmRadius(float radius) {
        this.mRadius = radius;
        mRadialGradient = new RadialGradient(mDownX, mDownY, radius, rippleColor, rippleColor, Shader.TileMode.MIRROR);
        mPaint.setShader(mRadialGradient);
        invalidate();
    }

About

按钮的波纹效果

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages