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:例子中,没一次按下方向键都得把所有坐标重新绘制一遍。

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

无忧云:洛阳BGP云服务器低至38.4元/月起;雅安高防云服务器/高防物理机优惠

无忧云怎么样?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点。一、无忧云官网点击此处进入无忧云官方网站二...

Vultr VPS新增第18个数据中心 瑞典斯德哥尔摩欧洲VPS主机机房

前几天还在和做外贸业务的网友聊着有哪些欧洲机房的云服务器、VPS商家值得选择的。其中介绍他选择的还是我们熟悉的Vultr VPS服务商,拥有比较多达到17个数据中心,这不今天在登录VULTR商家的时候看到消息又新增一个新的机房。这算是第18个数据中心,也是欧洲VPS主机,地区是瑞典斯德哥尔摩。如果我们有需要欧洲机房的朋友现在就可以看到开通的机房中有可以选择瑞典机房。目前欧洲已经有五个机房可以选择,...

10gbiz首月半价月付2.36美元,香港/洛杉矶VPS、硅谷独立服务器/站群服务器

收到10gbiz发来的7月份优惠方案,中国香港、美国洛杉矶机房VPS主机4折优惠码,优惠后洛杉矶VPS月付2.36美元起,香港VPS月付2.75美元起。这是一家2020年成立的主机商,提供的产品包括独立服务器租用和VPS主机等,数据中心在美国洛杉矶、圣何塞和中国香港。商家VPS主机基于KVM架构,支持使用PayPal或者支付宝付款。洛杉矶VPS架构CPU内存硬盘带宽系统价格单核512MB10GB1...

surfacecreated为你推荐
y码S`M`XXL`L`XL身高体重分别是多少?自定义表情搜狗输入法怎么添加自定义表情assemblyinfoasp.net这几个文件是干什么的?数据统计分析表怎样建立数据透视表和数据分析表?assemblyinfoCSE和CS有什么区别微信智能机器人微信群机器人是怎么实现的labelforhtml标签中lable的for属性有什么作用?河北云办税厅用小度怎么打开河北教育资讯云平台?移动硬盘文件或目录损坏且无法读取移动硬盘文件或目录损坏且无法读取怎么办??人脸识别解锁iphone人脸识别解锁
网址域名注册 过期域名查询 vps论坛 域名抢注工具 hostigation 服务器配置技术网 域名商 linode z.com themeforest suspended 正版win8.1升级win10 免费ftp空间申请 华为4核 卡巴斯基官方免费版 南通服务器 空间登陆首页 丽萨 net空间 电信网络测速器 更多