用surfaceView 做一个可动态变化的色环效果
来源:互联网 发布:哪里有淘宝店铺转让 编辑:程序博客网 时间:2024/05/21 18:08
第一篇写surfaceView,其实也没什么特别的用意,单纯是因为最近在研究这个。多的不说,先上效果图;
通过绘画技巧和角度的控制画出圆环做背景,主要的思路是利用View的drawArc画扇形的方法,中间再画一个白色的圆,再根据区域涂色,就能画出圆环图形
public class DrawRound extends SurfaceView implements SurfaceHolder.Callback,Runnable{
float rooterX=500;
float rooterY=800;
float rooterR=400;
float cornerAll=360;
float cornerInit=0;
private int[] colorC={
Color.BLACK,
Color.BLUE,
Color.CYAN,
Color.DKGRAY,
Color.GRAY,
Color.GREEN,
Color.LTGRAY,
Color.RED,
Color.YELLOW
};
@Override
public void surfaceCreated(SurfaceHolder arg0) {
flag = true;
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
rooterX=width/2;
rooterY=height/2-100;
thread = new Thread(this);
thread.start();
}
//提供给外部的接口用于修改色环上的颜色条目,默认是4
public void drawChange(int count){
this.count=count;
thread = new Thread(this);
thread.start();
}
@Override
public void run() {
//创建Paint数组,长度由count即可有外部决定
Paint[] paints=new Paint[count];
RectF rects=new RectF(rooterX-rooterR, rooterY-rooterR, rooterX+rooterR,rooterY+rooterR);
Paint paint=null;
//确定画布的数据
for(int i=0;i<count;i++){
paint=new Paint();
paint.setColor(colorC[i%9]);
paint.setAntiAlias(true);
paint.setStyle(Style.FILL_AND_STROKE);
paints[i]=paint;
}
paintWhite=new Paint();
paintWhite.setColor(Color.WHITE);
paintWhite.setAntiAlias(true);
paintWhite.setStyle(Style.FILL_AND_STROKE);
paintLine=new Paint();
paintLine.setColor(Color.WHITE);
paintLine.setAntiAlias(true);
paintLine.setStyle(Style.FILL_AND_STROKE);
canvas=this.holder.lockCanvas();
//界面的底色设置为白色
this.canvas.drawColor(Color.WHITE);
this.canvas.drawCircle(rooterX, rooterY, rooterR, paintWhite);
this.canvas.drawLine(rooterX, rooterY-rooterr, rooterX, rooterY-rooterR, paintLine);
this.canvas.drawLine(rooterX, rooterY+rooterr, rooterX, rooterY+rooterR, paintLine);
this.canvas.drawLine(rooterX-rooterr, rooterY, rooterX-rooterR, rooterY, paintLine);
this.canvas.drawLine(rooterX+rooterr, rooterY, rooterX+rooterR, rooterY, paintLine);
//通过外部的数据count 来画扇形,cornerAll/count是每个扇形划过的角度大小;
float cornerA=0;
for(int i=0;i<count;i++){
this.canvas.drawArc(rects, cornerA, cornerAll/count, true, paints[i]);
cornerA=cornerA+cornerAll/count;
}
//画中心的圆环
this.canvas.drawCircle(rooterX, rooterY, rooterr, paintWhite);
}
}
MainActivity的代码其实很简单,就是一个btn,设置点击效果,XML代码是直接把包名带入
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawR=(DrawRound)findViewById(R.id.my_surface_view);
Button change_btn=(Button)findViewById(R.id.change_btn);
change_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
int ran=(int)(1+Math.random()*10);
drawR.drawChange(ran);
}
});
}
}
- 用surfaceView 做一个可动态变化的色环效果
- 分享一个可动态变化,多屏适配的ActionBar控件--SuperActionBar
- 一个可以一直滚动的ImageView(可做视差效果)
- 一个可以一直滚动的ImageView(可做视差效果)
- SurfaceView 程序效果:用线程画一个蓝色的长方形。
- 用SurfaceView实现写字板的效果
- 使用 SurfaceView 实现一个下雨的天气效果
- 自定义可动态变化布局
- 最近比较迷flash professional cc 做PPT,做一个flash做动态打字效果的教程
- 用JS脚本做一个可拖动的对话框
- 用bootstrap做一个背景可轮转的登录界面
- SpanBuilder 一个TextView可设置的效果
- 做一个可编辑的表格控件
- 做一个可编辑的表格控件
- 做一个可编辑的表格控件
- 做一个可编辑的表格控件
- 做一个可编辑的表格控件
- 企业网站展示补充用Jquery实现简单的动态变化效果
- java---不停机控制jvm的gc选项
- pytorch 离线安装
- Qt之自定义控件(开关按钮)
- Java实现Spark程序中的坑坑洼洼
- 智能耳机究竟是智能还是智障
- 用surfaceView 做一个可动态变化的色环效果
- @transactional 事务注解注意事项
- 我要开始写博客啦 哈哈哈
- python 查看文档编码格式-chardet
- 解决mysql字段值为“default”时会被清空问题
- Spring实现控制反转(IOC)的三种方式(一)——属性注入
- 理解java回调机制
- 程序员的自我修养-路由交换原理
- err max number of clients reached 解决办法