public RadialGradient(float centerX, float centerY, float radius, int[] colors, float[] stops, TileMode tileMode) {
throw new RuntimeException("Stub!");
} public RadialGradient(float centerX, float centerY, float radius, int centerColor, int edgeColor, TileMode tileMode) {
throw new RuntimeException("Stub!");
}

具体用法:

package com.loaderman.customviewdemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RadialGradient;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View; public class RadialGradientView extends View {
private Paint mPaint;
private RadialGradient mRadialGradient;
private int mRadius; public RadialGradientView(Context context, AttributeSet attrs) {
super(context, attrs);
setLayerType(LAYER_TYPE_SOFTWARE, null);
mPaint = new Paint();
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); /**
* 两色渐变
*/
if (mRadialGradient == null){
mRadius = getWidth()/6;
mRadialGradient = new RadialGradient(getWidth()/2,getHeight()/2,mRadius,0xffff0000,0xff00ff00, Shader.TileMode.CLAMP);
mPaint.setShader(mRadialGradient);
} /**
* 多色渐变
*/
// if (mRadialGradient == null) {
// mRadius = getWidth() / 2;
// int[] colors = new int[]{0xffff0000, 0xff00ff00, 0xff0000ff, 0xffffff00};
// float[] stops = new float[]{0f, 0.2f, 0.5f, 1f};
// mRadialGradient = new RadialGradient(getWidth() / 2, getHeight() / 2, mRadius, colors, stops, Shader.TileMode.REPEAT);
// mPaint.setShader(mRadialGradient);
// } canvas.drawRect(0,0,getWidth(),getHeight(),mPaint);
}
}
package com.loaderman.customviewdemo;

import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RadialGradient;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.animation.AccelerateInterpolator;
import android.widget.Button; public class RippleView extends Button {
private int mX, mY;
private ObjectAnimator mAnimator;
private int DEFAULT_RADIUS = 50;
private int mCurRadius = 0;
private RadialGradient mRadialGradient;
private Paint mPaint; public RippleView(Context context, AttributeSet attrs) {
super(context, attrs);
setLayerType(LAYER_TYPE_SOFTWARE,null);
mPaint = new Paint();
} @Override
public boolean onTouchEvent(MotionEvent event) { if (mX != event.getX() || mY != mY) {
mX = (int) event.getX();
mY = (int) event.getY(); setRadius(DEFAULT_RADIUS);
} if (event.getAction() == MotionEvent.ACTION_DOWN) { return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) { if (mAnimator != null && mAnimator.isRunning()) {
mAnimator.cancel();
} if (mAnimator == null) {
mAnimator = ObjectAnimator.ofInt(this,"radius",DEFAULT_RADIUS, getWidth());
} mAnimator.setInterpolator(new AccelerateInterpolator());
mAnimator.addListener(new Animator.AnimatorListener() {
public void onAnimationStart(Animator animation) { }
public void onAnimationEnd(Animator animation) {
setRadius(0);
} public void onAnimationCancel(Animator animation) { } public void onAnimationRepeat(Animator animation) { }
});
mAnimator.start();
} return super.onTouchEvent(event);
} public void setRadius(final int radius) {
mCurRadius = radius;
if (mCurRadius > 0) {
mRadialGradient = new RadialGradient(mX, mY, mCurRadius, 0x00FFFFFF, 0xFF58FAAC, Shader.TileMode.CLAMP);
mPaint.setShader(mRadialGradient);
}
postInvalidate();
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); canvas.drawCircle(mX, mY, mCurRadius, mPaint);
}
}

效果图:

最新文章

  1. Ajax请求安全性讨论
  2. Sql With as 用法
  3. 在iOS开发过程中你遇到这个问题了么?
  4. wicket基础应用(3)——wicket控件的隐藏和显示
  5. image hover
  6. Delphi调用WINAPI时到底应该是指针还是结构体(注意是Delphi变量本身就是指针)
  7. 思维导图MindManager基础教程
  8. YII缓存依赖的应用
  9. 沙盒单机网站代表-Steam【推荐】
  10. ES 11 - 配置Elasticsearch的映射 (mapping)
  11. Python 进阶 异步async/await
  12. python自动化开发-[第十六天]-bootstrap和django
  13. Hibernate(9)_双向n对n
  14. Linux pwn入门教程(3)——ROP技术
  15. DOM.getBoundingClientRect()
  16. 【读书笔记】iOS-iOS的持续集成
  17. LOJ #559. 「LibreOJ Round #9」ZQC 的迷宫
  18. 理解 Delphi 的类(十) - 深入方法[17] - 提前声明
  19. oracle存储过程递归调用
  20. django的url配置

热门文章

  1. c++混合使用不同标准编译潜在的问题
  2. 无法访问此网站 ERR_CONTENT_DECODING_FAILED
  3. golang 时间的比较,time.Time的初始值?
  4. 大数据之路week06--day07(Hadoop常用命令)
  5. TOMCAT 请求HTTP原理
  6. for循环中使用async/await
  7. Vue获取后端数据 渲染页面后跳转
  8. 使用 IDEA 打包spring cloud 成 jar在ubuntu 中运行
  9. MySQL-数据库三范式
  10. 为什么final类型map和list内容可以修改