怎么在Android中通过自定义控件实现水波纹效果
今天就跟大家聊聊有关怎么在Android中通过自定义控件实现水波纹效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、成都做网站、霍林郭勒网络推广、微信小程序定制开发、霍林郭勒网络营销、霍林郭勒企业策划、霍林郭勒品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供霍林郭勒建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
MainActivity.java
package com.example.mhy.shuibowen; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
activity_main.xml
MyRingWave.java
package com.example.mhy.shuibowen; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Handler; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import java.util.ArrayList; /** * 水波纹效果 * Created by mhy on 2016/6/16. */ public class MyRingWave extends View { /** * 二个相临波浪中心点的最小距离 */ private static final int DIS_SOLP = 13; protected boolean isRunning = false; private ArrayListwList; public MyRingWave(Context context,AttributeSet attrs) { super(context, attrs); wList = new ArrayList (); } @Override protected void onDraw(Canvas canvas) { for(int i=0; i DIS_SOLP || Math.abs(w.cy-y)>DIS_SOLP){ addPoint2List(x,y); } }; } /** * 添加新的波浪 * @param x * @param y */ private void addPoint2List(int x, int y) { Wave w = new Wave(); w.cx = x; w.cy=y; Paint pa=new Paint(); pa.setColor(colors[(int)(Math.random()*4)]); pa.setAntiAlias(true); pa.setStyle(Paint.Style.STROKE); w.p = pa; wList.add(w); } private int [] colors = new int[]{Color.BLUE,Color.RED,Color.YELLOW,Color.GREEN}; private class Wave { //圆心 int cx; int cy; //画笔 Paint p; //半径 int r; } }
MyRing.java
package com.example.mhy.shuibowen; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** * Created by mhy on 2016/6/16. */ public class MyRing extends View { /** * 圆心的X坐标 */ private float cx; /** * 圆心的Y坐标 */ private float cy; /** * 圆环半径 */ private float radius = 0; /** * 默认画笔 */ private Paint paint; private boolean isRuning = false; public MyRing(Context context, AttributeSet attrs) { super(context, attrs); initView(); } private void initView() { radius = 0; paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.STROKE); // 空心圆 paint.setStrokeWidth(radius / 4); // 画笔宽度 半径4分之一 paint.setColor(Color.GREEN); // 画笔颜色 paint.setAlpha(255); //不透明 } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if(changed) { cx = getWidth() / 2; cy = getHeight() / 2; } } @Override protected void onDraw(Canvas canvas) { canvas.drawCircle(cx, cy, radius, paint); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); isRuning = false; } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); if(event.getAction() == MotionEvent.ACTION_DOWN) { cx = event.getX(); cy = event.getY(); initView(); startAnim(); } return true; } private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // 设置透明度 int alpha = paint.getAlpha(); if(alpha == 0) { isRuning = false; } // 透明度 慢慢变透明 alpha = Math.max(0, alpha-10); paint.setAlpha(alpha); System.out.println(alpha); // 设置半径 radius += 5; paint.setStrokeWidth(radius / 3); invalidate(); if(isRuning) { handler.sendEmptyMessageDelayed(0, 50); } } }; private void startAnim() { isRuning = true; handler.sendEmptyMessageDelayed(0, 50); } }
Android是什么
Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。
看完上述内容,你们对怎么在Android中通过自定义控件实现水波纹效果有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
文章名称:怎么在Android中通过自定义控件实现水波纹效果
转载源于:http://cdiso.cn/article/pchjjh.html