SurfaceView 试用
来源:互联网 发布:服装生产软件 编辑:程序博客网 时间:2024/05/22 00:38
由于项目需要用到动画效果,如果大量绘制animation,则性能不佳,上网搜了,有surfaceview这个东西(不占用主线程)。因此自己学习了一下,以下demo是实现每个一秒钟绘制显示不同颜色的笑脸。
涉及点:SurfaceView、SurfaceHolder。
一、实现效果:
二、自定义surfaceview类
1、:
继承SurfaceView,实现SurfaceHolder Callback接口。
2、重写构造方法
3、实现三个callback方法:
@Override public void surfaceCreated(SurfaceHolder holder) { } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { }
三、整体代码:
public class MySurfaceViewTest extends SurfaceView implements SurfaceHolder.Callback{ private SurfaceHolder mSurfaceHolder; private MyThread mMyThread; private boolean isDraw = false; public MySurfaceViewTest(Context context) { super(context); mSurfaceHolder = this.getHolder(); mSurfaceHolder.addCallback(this); mMyThread = new MyThread(); } private class MyThread extends Thread { @Override public void run() { while (isDraw) { try { sleep(1000);//睡一秒钟 drawUI(); } catch (Exception e) { } } super.run(); } } private void drawUI() { Canvas canvas = null; try { canvas = mSurfaceHolder.lockCanvas(); synchronized (mSurfaceHolder) { drawCanvas(canvas); } } finally { if (canvas != null) { mSurfaceHolder.unlockCanvasAndPost(canvas); } } } private void drawCanvas(Canvas canvas) { // 在 canvas 上绘制需要的图形 if (canvas != null) { Log.d("weiwei","come-----------------------------------------------"); canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); // 清空界面 Paint p = new Paint(); p.setColor(CircleTextImageUtil.getRandomColor());// 设置随机颜色// //画笑脸弧线 p.setStyle(Paint.Style.STROKE);//设置空心 RectF oval1=new RectF(150,20,180,40); canvas.drawArc(oval1, 180, 180, false, p);//小弧形 oval1.set(190, 20, 220, 40); canvas.drawArc(oval1, 180, 180, false, p);//小弧形 oval1.set(160, 30, 210, 60); canvas.drawArc(oval1, 0, 180, false, p);//小弧形 } } static class CircleTextImageUtil { /** * Get the random color. * * @return */ private static int getRandomColor() { List<Integer> colorList = new ArrayList<Integer>(); colorList.add(Color.RED); colorList.add(Color.BLUE); colorList.add(Color.GREEN); colorList.add(Color.WHITE); colorList.add(Color.YELLOW); colorList.add(Color.GRAY); return colorList.get((int) (Math.random() * colorList.size())); } } @Override public void surfaceCreated(SurfaceHolder holder) { isDraw = true; mMyThread.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { isDraw = false; }}
引用:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); CrashReport.initCrashReport(getApplicationContext(), "077d3ebb59", false); MySurfaceViewTest mySurfaceViewTest = new MySurfaceViewTest(this);// setContentView(R.layout.activity_main); setContentView(mySurfaceViewTest); }}
0 0
- SurfaceView 试用
- surfaceview
- SurfaceView
- surfaceview
- surfaceview
- SurfaceView
- SurfaceView
- SurfaceView
- SurfaceView
- SurfaceView
- SurfaceView
- SurfaceView
- surfaceview
- SurfaceView
- SurfaceView
- SurfaceView
- surfaceview
- surfaceview
- Bootstrap入门基础(二)
- POJ-1416 Shredding Company(DFS)
- STM32根据库建立自己的工程
- 设计模式-行为型- 状态模式(State)
- mysql插入数据后返回自增ID的方法
- SurfaceView 试用
- C#,struct,class,使用BinaryFormatter将对象序列化
- Jdbc对Mysql数据库的基本操作
- OC-类目
- function详解 c++
- SDUT OJ 2143 图结构练习——最短路径
- oracle 体系结构
- HTTP协议详解
- caffe绘制训练过程的loss和accuracy曲线