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

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

RAKsmart:美国洛杉矶独服,E3处理器/16G/1TB,$76.77/月;美国/香港/日本/韩国站群服务器,自带5+253个IPv4

RAKsmart怎么样?RAKsmart机房即日起开始针对洛杉矶机房的独立服务器进行特别促销活动:低至$76.77/月,最低100Mbps带宽,最高10Gbps带宽,优化线路,不限制流量,具体包括有:常规服务器、站群服务器、10G大带宽服务器、整机机柜托管。活动截止6月30日结束。RAKsmart,美国华人老牌机房,专注于圣何塞服务器,有VPS、独立服务器等。支持PayPal、支付宝付款。点击直达...

SugarHosts糖果主机圣诞节促销 美国/香港虚拟主机低至6折

SugarHosts 糖果主机商我们算是比较熟悉的,早年学会建站的时候开始就用的糖果虚拟主机,目前他们家还算是为数不多提供虚拟主机的商家,有提供香港、美国、德国等虚拟主机机房。香港机房CN2速度比较快,美国机房有提供优化线路和普通线路适合外贸业务。德国欧洲机房适合欧洲业务的虚拟主机。糖果主机商一般是不会发布黑五活动的,他们在圣圣诞节促销活动是有的,我们看到糖果主机商发布的圣诞节促销虚拟主机低至6折...

wordpress投资主题模版 白银黄金贵金属金融投资网站主题

wordpress投资主题模版是一套适合白银、黄金、贵金属投资网站主题模板,绿色大气金融投资类网站主题,专业高级自适应多设备企业CMS建站主题 完善的外贸企业建站功能模块 + 高效通用的后台自定义设置,简洁大气的网站风格设计 + 更利于SEO搜索优化和站点收录排名!点击进入:wordpress投资主题模版安装环境:运行环境:PHP 7.0+, MYSQL 5.6 ( 最低主机需求 )最新兼容:完美...

surfacecreated为你推荐
jmhjmh是谁waze马来西亚中文导航waze地图草莓派什么是草莓派?华为总裁女儿为啥姓孟孟晚舟姓孟,任正非姓任,孟晚舟怎么是任正非的女?网络电话永久免费打有没有永久免费的网络电话微信智能机器人微信群机器人是怎么实现的中信银行理财宝中信银行理财宝金卡怎样激活点心os点心操作系统?embed函数C语言中push函数的定义以及用法。x77永久论坛hdmv论坛(www.hdmv.cc)怎么打不开了呀?请教高手
拜登买域名批特朗普 yardvps seovip 阿里校园 tna官网 南通服务器 天翼云盘 台湾谷歌 下载速度测试 东莞主机托管 中国联通宽带测速 小夜博客 cx域名 magento主机 主机声音大 时间同步服务器地址 电脑主机结构图 灵动鬼影实录2 freightforwarder sgs认证机构 更多