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

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

香港最便宜的vps要多少钱?最便宜的香港vps能用吗?

香港最便宜的vps要多少钱?最便宜的香港vps能用吗?香港vps无需备案,整体性能好,而且租用价格便宜,使用灵活,因为备受站长喜爱。无论是个人还是企业建站,都比较倾向于选择香港VPS。最便宜的香港vps能用吗?正因为有着诸多租用优势,香港VPS在业内颇受欢迎,租用需求量也在日益攀升。那么,对于新手用户来说,香港最便宜的vps租用有四大要点是务必要注意的,还有易探云香港vps租用最便宜的月付仅18元...

Bluehost美国虚拟主机2.95美元/月,十八周年庆年付赠送顶级域名和SSL证书

Bluehost怎么样,Bluehost好不好,Bluehost成立十八周年全场虚拟主机优惠促销活动开始,购买12个月赠送主流域名和SSL证书,Bluehost是老牌虚拟主机商家了,有需要虚拟主机的朋友赶紧入手吧,活动时间:美国MST时间7月6日中午12:00到8月13日晚上11:59。Bluehost成立于2003年,主营WordPress托管、虚拟主机、VPS主机、专用服务器业务。Blueho...

美国G口/香港CTG/美国T级超防云/湖北高防云服务器物理机促销活动 六一云

六一云 成立于2018年,归属于西安六一网络科技有限公司,是一家国内正规持有IDC ISP CDN IRCS电信经营许可证书的老牌商家。大陆持证公司受大陆各部门监管不好用支持退款退现,再也不怕被割韭菜了!主要业务有:国内高防云,美国高防云,美国cera大带宽,香港CTG,香港沙田CN2,海外站群服务,物理机,宿母鸡等,另外也诚招代理欢迎咨询。官网www.61cloud.net最新直销劲爆...

surfacecreated为你推荐
股价图给你一张股票图你是怎么分析的具体的说cpu监控win10自带cpu温度监控svn服务器搭建怎样搭建本地svn服务器环境小四号字Excel小四号字等于几号字assemblyinfoCSE和CS有什么区别审计平台什么叫数据库审计系统?微信智能机器人有一个人加我微信,他说他自己是图灵机器人,我想问一下这是啥软件怎么可以自动回复微信?kjava谁能告诉我KJAVA是什么意思和普通的JAVA程序有什么区别?activitygroupAndroid中如何在ActivityGroup里面监听back按钮,使得可按要求实现哪个activity可返回,哪个不需要。。腾讯贴吧QQ应该有贴吧的吧?那怎样进QQ贴吧?在(=@__@=)哪里?
长沙域名注册公司 手机域名注册 希网动态域名 enom 国内免备案主机 香港机房 紫田 nerd 域名优惠码 免费网络电视 数字域名 域名和空间 qq云端 上海服务器 双12 国内域名 数据库空间 湖南idc 注册阿里云邮箱 域名转入 更多