博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SurfaceView使用总结
阅读量:6366 次
发布时间:2019-06-23

本文共 1433 字,大约阅读时间需要 4 分钟。

一,简单使用
可见以下链接,比较详细
二,刷新View
比如点击view时需要它重画
 
  1. @Override
  2. public boolean onTouchEvent(MotionEvent event) {
  3. switch (event.getAction()) {
  4. case MotionEvent.ACTION_DOWN:
  5. case MotionEvent.ACTION_MOVE:
  6. mXCross = event.getX();
  7. mCrossEnabled = true;
  8. // 重绘
  9. if(myThread!=null && myThread.myHandler != null) {
  10. myThread.myHandler.sendEmptyMessage(0);
  11. }
  12. // Log.e("on mXCross,mYCross==",mXCross + "," + mYCross);
  13. break;
  14. case MotionEvent.ACTION_UP :
  15. mXCross = -1f;
  16. mCrossEnabled = false;
  17. // 重绘
  18. if(myThread!=null && myThread.myHandler != null) {
  19. myThread.myHandler.sendEmptyMessage(0);
  20. }
  21. break;
  22. }
  23. return true;
  24. }
在子线程中绘制View,需要线程绑定一个Looper,需要handler
 
  1. // 线程内部类
  2. class MyThread extends Thread {
  3. private SurfaceHolder holder;
  4. private StockDrawWave drawWave;
  5. MyHandler myHandler;// 用户子线程绘制UI
  6. public MyThread(SurfaceHolder holder, StockDrawWave drawWave) {
  7. this.holder = holder;
  8. this.drawWave = drawWave;
  9. }
  10. class MyHandler extends Handler {
  11. @Override
  12. public void handleMessage(Message msg) {
  13. drawTimeChar();// 以后刷新时都直接执行绘制方法
  14. }
  15. }
  1. @Override
  2. public void run() {
    // 此处为初始化,第一次绘制时运行
  3. Looper.prepare();// Looper与Thread绑定
  4. myHandler = new MyHandler();// 与Looper绑定
  5. drawTimeChar();
  6. Looper.loop();// 处理消息
  7. }
View关闭时,终止线程并让其被回收
 
  1. @Override
  2. public void surfaceDestroyed(SurfaceHolder holder) {
  3. if (myThread != null) {
  4. myThread.isRun = false;
  5. myThread.myHandler.getLooper().quit();// 终止looper循环,让线程可以被回收
  6. myThread = null;
  7. }
  8. }

转载于:https://www.cnblogs.com/chenchengzhi/p/4915230.html

你可能感兴趣的文章
《Java EE 7精粹》—— 第1章 Java EE 1.1 简介
查看>>
《Exchange Server 2013 SP1管理实践》——导读
查看>>
syslog:类Unix系统常用的log服务
查看>>
使用Annotation设计持久层
查看>>
深入实践Spring Boot2.4.1 Neo4j依赖配置
查看>>
Zen Cart 如何添加地址栏上的小图标
查看>>
SecureCrt 连接Redhat linux
查看>>
[NHibernate]持久化类(Persistent Classes)
查看>>
如何在Hive中使用Json格式数据
查看>>
linux如何恢复被删除的热文件
查看>>
Eclipse(MyEclipse) 自动补全
查看>>
Struts2中dispatcher与redirect的区别
查看>>
zabbix agentd configure
查看>>
[From OpenBSD Man Page]CARP
查看>>
地图点聚合优化方案
查看>>
Google Chrome 快捷方式
查看>>
备考PMP心得体会
查看>>
vue proxy匹配规则
查看>>
线上应用故障排查之一:高CPU占用
查看>>
Extend Volume 操作 - 每天5分钟玩转 OpenStack(56)
查看>>