surfacecreated如何实现Android SurfaceView

surfacecreated  时间:2021-06-08  阅读:()

最新款的微软Surface Laptop值得买吗

看你是学生还是商务办公哦 是学生版,搭载Windows 10S.只能从应用商城下载应用,相当于闭源系统。

但是有一段时间,你可以升级到普通的Windows 10,此过程不可逆,也就是升级以后不能回到S系统 Book,配置高一点,可分离机身和键盘,更炫酷,待机时间也长。

所以追求性能和品质,那肯定是BOOK更好一点。

第三点就看你的预算啦!虽然国行的还没定价,但是我们猜测不会很贵,因为是为了覆盖学生和教育这一块啊,所以说性价比肯定是更高一点

得到之后就不懂珍惜

是的

很多人 总是在用有时不珍惜 失去后又后悔

所以

现在的我们

应该珍惜紧握手中的幸福

不要等失去后才后悔

时间是不会等人的

流失的就永远流失了

何必苦苦回忆

surface preparation是什么意思

surface preparation [英]?s?:fis ?prep??rei??n [美]?s?f?s ?pr?p??re??n 表面处理 [例句]This severe service will also require high-quality surface preparation. 此类设施也需进行高质量的表面处理。

surface laptop和surface pro的区别是什么?

以全新一代Surface Pro 7和Surface 3为例,Surface Pro 7配置高分辨率的12.3英寸触摸显示屏,是一款性能强劲的多功能二合一笔记本电脑,可在笔记本电脑、高性能平板电脑和便携工作室三种模式间自如转换。

其机身轻巧超薄,起始重量仅755克,极致便携。

凭借其强大的第10代英特尔酷睿处理器、快速充电、长效电池续航以及即时启动(Instant On)功能,无论何时灵感来袭,都能让您随时回到工作中。

而Surface 3作为一款性能卓越的笔记本电脑,具有多种丰富色彩,2种键盘材质和2款不同尺寸——13.5英寸和15英寸,彰显个性风采。

13.5英寸的Surface 3内置第10代英特尔酷睿处理器,使高性能、高便携性的设备成为可能。

15英寸Surface 3则内置独家AMD Ryzen Microsoft Surface版处理器,带来出色的响应能力,提升的图形性能 (GPU),让您工作娱乐两不误。

访问微软官方商城了解更多Surface Pro和Surface 新款产品的详情信息。

如何实现Android SurfaceView

SurfaceView是View的继承结构中一个比较特殊的子类,它的作用是提供一个第二线程来完成图形的绘制。

因此应用程序不需要等待View的图形绘制,第二线程会异步完成图形的绘制。

  SurfaceView实现的步骤:   继续SurfaceView并实现SurfaceHolder.Callback接口,该接口提供了SurfaceView创建、属性发生变化、销毁的时间点,那么你可以在适当的时间点完成具体的工作。

  在SurfaceView初始化的时候调用SurfaceView.getHolder()方法获取一个SurfaceHolder,SurfaceHolder用于管理SurfaceView的工作过程。

为了让SurfaceHolder起作用,必须为SurfaceHolder添加回调方法(即第一步实现的SurfaceHolder.Callback):   [java] view plaincopyprint?   SurfaceHolder.addCallBack(SurfaceHolder.Callback);   在SurfaceView内创建第二线程的内部类(暂命名为SecondThread),它的主要任务是完成Canvas的图形绘制。

为了能让SecondThread获得Canvas实例,必须给SecondThread传递在步骤二中获得的SurfaceHolder。

现在就可以通过SurfaceHolder.lockCanvas()方法得到Canvas实例,并在Canvas上绘制图形。

当图形绘制完成后,必须马上调用SurfaceHolder.unlockCanvasAndPost()为Canvas解锁,使其他线程可以使用该画布。

  有几个注意点:   每一次通过SurfaceHolder获取的Canvas都会保持上一次绘制的状态。

如果需要重新绘制图形,可以通过调用Canvas.drawColor()或Canvas.drawBitmap()来擦除上次遗留的图形。

  并不一定只用第二线程来绘制图形,也可以开启第三,第四个线程来绘制图形。

  注意线程安全。

  不需要像View一样,调用invalidate()方法来指示图形的刷新。

  SurfaceView的一个范例:   [java] view plaincopyprint?   .sin90lzc.android.sample;   import java.util.ArrayList;   import java.util.Collections;   import java.util.List;   import android.content.Context;   import android.graphics.Canvas;   import android.graphics.Color;   import android.graphics.Paint;   import android.util.AttributeSet;   import android.util.Log;   import android.view.KeyEvent;   import android.view.SurfaceHolder;   import android.view.SurfaceView;   public class CanvasView extends SurfaceView implements SurfaceHolder.Callback {   public static class Point {   private float x;   private float y;   public Point(float x, float y) {   this.x = x;   this.y = y;   }   public float getX() {   return x;   }   public void setX(float x) {   this.x = x;   }   public float getY() {   return y;   }   public void setY(float y) {   this.y = y;   }   public Point nextPoint(Orien o) {   float tempX = x;   float tempY = y;   switch (o) {   case UP:   tempY = y - LINE_LENGTH;   break;   case DOWN:   tempY = y + LINE_LENGTH;   break;   case LEFT:   tempX = x - LINE_LENGTH;   break;   case RIGHT:   tempX = x + LINE_LENGTH;   break;   case UNKNOWN:   break;   }   return new Point(tempX, tempY);   }   }   enum Orien {   UP, LEFT, DOWN, RIGHT, UNKNOWN   }   public static class DrawThread extends Thread {   private List<Point> points = Collections   .synchronizedList(new ArrayList<Point>());   private boolean mRun;   private Paint mPaint;   private Orien curOrien;   public synchronized void setRun(boolean run) {   this.mRun = run;   notifyAll();   }   public synchronized boolean getRun() {   while (!mRun) {   try {   wait();   } catch (InterruptedException e) {   e.printStackTrace();   }   }   return mRun;   }   //当按上下左右键时,生成相应的点坐标   private synchronized boolean doKeyDown(int KeyCode, KeyEvent event) {   synchronized (holder) {   Point p = null;   switch (KeyCode) {   case KeyEvent.KEYCODE_DPAD_UP:   if (curOrien != Orien.DOWN) {   curOrien = Orien.UP;   p = curPoint.nextPoint(curOrien);   }   break;   case KeyEvent.KEYCODE_DPAD_DOWN:   if (curOrien != Orien.UP) {   curOrien = Orien.DOWN;   p = curPoint.nextPoint(curOrien);   }   break;   case KeyEvent.KEYCODE_DPAD_LEFT:   if (curOrien != Orien.RIGHT) {   curOrien = Orien.LEFT;   p = curPoint.nextPoint(curOrien);   }   break;   case KeyEvent.KEYCODE_DPAD_RIGHT:   if (curOrien != Orien.LEFT) {   curOrien = Orien.RIGHT;   p = curPoint.nextPoint(curOrien);   }   break;   default:   curOrien = Orien.UNKNOWN;   }   if (p != null) {   curPoint = p;   points.add(p);   setRun(true);   }   Log.i(LOG_TAG, curOrien.toString());   }   return true;   }   //当释放按键时,停止绘图   private synchronized boolean doKeyUp(int KeyCode, KeyEvent event) {   synchronized (holder) {   setRun(false);   curOrien = Orien.UNKNOWN;   }   return true;   }   SurfaceHolder holder;   private Point curPoint;   public DrawThread(SurfaceHolder holder) {   this.holder = holder;   mPaint = new Paint();   mPaint.setColor(Color.GREEN);   curPoint = new Point(50, 50);   points.add(curPoint);   }   public void resetPoint() {   }   private void doDraw(Canvas canvas) {   for (int i = 0; i + 1 < points.size(); i += 1) {   Point lp = points.get(i);   Point np = points.get(i + 1);   canvas.drawLine(lp.getX(), lp.getY(), np.getX(), np.getY(),   mPaint);   }   }   @Override   public void run() {   Canvas canvas = null;   while (getRun()) {   try {   canvas = holder.lockCanvas();   synchronized (holder) {   doDraw(canvas);   }   } finally {   holder.unlockCanvasAndPost(canvas);   setRun(false);   }   }   }   }   private DrawThread thread;   public static final String LOG_TAG = "CanvasView";   private static final int LINE_LENGTH = 30;   public CanvasView(Context context) {   super(context);   }   public CanvasView(Context context, AttributeSet attrs) {   super(context, attrs);   //SurfaceView由SurfaceHolder管理   SurfaceHolder holder = getHolder();   holder.addCallback(this);   thread = new DrawThread(holder);   thread.start();   }   @Override   public boolean onKeyDown(int keyCode, KeyEvent event) {   return thread.doKeyDown(keyCode, event);   }   @Override   public boolean onKeyUp(int keyCode, KeyEvent event) {   return thread.doKeyUp(keyCode, event);   }   @Override   public void surfaceChanged(SurfaceHolder holder, int format, int width,   int height) {   Log.i(LOG_TAG, "surfaceChanged");   thread.resetPoint();   thread.setRun(true);   }   @Override   public void surfaceCreated(SurfaceHolder holder) {   Log.i(LOG_TAG, "surfaceCreated");   thread.resetPoint();   thread.setRun(true);   }   @Override   public void surfaceDestroyed(SurfaceHolder holder) {   Log.i(LOG_TAG, "surfaceDestroyed");   thread.setRun(false);   }   }   Notice:例子中,没一次按下方向键都得把所有坐标重新绘制一遍。

如果只是绘制最后一次没绘制的点时,不知道为什么会变成虚线,有待解决。

火数云-618限时活动,国内云服务器大连3折,限量50台,九江7折 限量30台!

官方网站:点击访问火数云活动官网活动方案:CPU内存硬盘带宽流量架构IP机房价格购买地址4核4G50G 高效云盘20Mbps独享不限openstack1个九江287元/月立即抢购4核8G50G 高效云盘20Mbps独享不限openstack1个九江329元/月立即抢购2核2G50G 高效云盘5Mbps独享不限openstack1个大连15.9元/月立即抢购2核4G50G 高效云盘5Mbps独享不限...

wordpress外贸企业主题 wordpress经典外贸企业建站主题

WordPress经典外贸企业建站主题,经典配色扁平化简约设计+跨屏自适应移动端设备,特色外贸企业建站功能模块+在线Inquiry询单功能,更有利于Google等英文搜索优化和站点收录。采用标准的HTML5+CSS3语言开发,兼容当下的各种主流浏览器: IE 6+(以及类似360、遨游等基于IE内核的)、Firefox、Google Chrome、Safari、Opera等;同时支持移动终端的常用...

raksmart:年中大促,美国物理机$30/月甩卖;爆款VPS仅月付$1.99;洛杉矶/日本/中国香港多IP站群$177/月

RAKsmart怎么样?RAKsmart发布了2021年中促销,促销时间,7月1日~7月31日!,具体促销优惠整理如下:1)美国西海岸的圣何塞、洛杉矶独立物理服务器低至$30/月(续费不涨价)!2)中国香港大带宽物理机,新品热卖!!!,$269.23 美元/月,3)站群服务器、香港站群、日本站群、美国站群,低至177美元/月,4)美国圣何塞,洛杉矶10G口服务器,不限流量,惊爆价:$999.00,...

surfacecreated为你推荐
qq业务查询我想查看QQ业务的到期时间,怎么查?csonline2看新闻 csol2 马上就要发布了 我有个问题问大神们 拜托了视频压缩算法1分钟视频的大小在10M左右的格式有哪些?企业资源管理系统企业人力资源管理系统的重要性?awv请问awv是什么样的格式啊?assemblyinfoasp.net这几个文件是干什么的?asp大马黑帽seo的webshell中,什么是大马和小马数据库界面如何创建数据库点心os什么是点心os?手机操作系统和手机区别么?一个是硬件一个是软件?听说炒的好火?软件开发技术文档软件开发项目中,过程管理文档都包括什么?
成都虚拟空间 淘宝虚拟主机 ip反查域名 php主机空间 com域名价格 电信服务器租赁 webhostingpad 免费ddos防火墙 qq金券 浙江服务器 云销售系统 umax 服务器防御 腾讯服务器 windowsserver2008 免费的加速器 月付空间 电信测速器在线测网速 内存 主机托管 更多