广州企业建站网站,做软件推广网站怎么赚钱,看男科比较正规的医院,个人网站设计师说一个真实的案例。其中需求要做一个绘图功能#xff0c;一听到绘图#xff0c;自然而然就像到了SurfaceView这个类。所以我就用了。android:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationvertical 一听到绘图自然而然就像到了SurfaceView这个类。所以我就用了。android:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationvertical android:idid/editandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent/然后就是MySurfaceView继承SurfaceView然后我们就会定义一个drawCanvas方法去绘图通常的做法就是这样package com.example.test;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.SurfaceHolder;import android.view.SurfaceView;public class MySurfaceVivew extends SurfaceView{private SurfaceHolder holder;private Bitmap bitmap;public MySurfaceVivew(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubholder this.getHolder();}private void drawCanvas(Bitmap bitmap){Canvas canvas holder.lockCanvas();if(canvas ! null){canvas.drawBitmap(bitmap, 0, 0, null);holder.unlockCanvasAndPost(canvas);}}public void setBitmap(Bitmap bitmap){this.bitmap bitmap;this.drawCanvas(bitmap);}}通过setBitmap去加载一张图片然后在用画布画出来。但是很不幸现实是残酷的当Activity加载布局时图片闪一下就黑屏了。为什么呢查了一下资料原来Activity在加载时后会卸载SurfaceView在创建后很快就被卸载掉了所以只能见到闪的一下就黑屏了。有些资料会说在onResume方法中设我也试了一下发现不行这下连闪都不闪一下。调试发现canvas画布为空。自然黑屏也就理所当然了。那怎么办解决问题的办法才是问题的关键。那么我们就要在画布创建时把图片画出来。有了突破点就好办了。canvas画布在什么时候创建就的看他谁提供的。canvas holder.lockCanvas(),不难看出宿主是surfaceholder。那么是不是surfaceholder被创建的同时创建了canvas呢我做了一次尝试。package com.example.test;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.SurfaceHolder;import android.view.SurfaceView;public class MySurfaceVivew extends SurfaceView implements SurfaceHolder.Callback{private SurfaceHolder holder;private Bitmap bitmap;public MySurfaceVivew(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubholder this.getHolder();}private void drawCanvas(Bitmap bitmap){Canvas canvas holder.lockCanvas();if(canvas ! null){canvas.drawBitmap(bitmap, 0, 0, null);holder.unlockCanvasAndPost(canvas);}}public void setBitmap(Bitmap bitmap){this.bitmap bitmap;this.drawCanvas(bitmap);}Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubthis.drawCanvas(bitmap);}Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}}