Android surfaceview使用——重载onTouchEvent

来源:互联网 发布:免费开淘宝店流程视频 编辑:程序博客网 时间:2024/06/06 00:56

surface上绘制bitmap,同时重载onTouchEnvet
import com.example.test.R;import android.R.color;import android.content.Context;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Rect;import android.util.Log;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class bmpdrow extends SurfaceView implements SurfaceHolder.Callback {   private Bitmap bmp;   private Resources res;   private SurfaceHolder holder;   private int bmp_w;   private int bmp_h;   private int height;   private int width;   private Canvas canvas;   private Rect rect;   public bmpdrow(Context context) {super(context);res=getResources();bmp=BitmapFactory.decodeResource(res, R.drawable.pic5_3);//x=bmp.getholder=getHolder();holder.addCallback(this);bmp_w=bmp.getWidth();bmp_h=bmp.getHeight();// TODO Auto-generated constructor stub}   @Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubheight=this.getHeight();width=this.getWidth();/* * view什么时候绘制完毕,什么时候才知道大小 *///mydrow(width/2,height/2);test_drow();Log.e("height", ""+height);Log.e("width",""+width);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}public void test_drow(){Log.e("test drow", "test drow");canvas=holder.lockCanvas();if(data.bmp==null)Log.e("bmp", "error");canvas.drawBitmap(data.bmp, 0, 0, null);if(canvas!=null){holder.unlockCanvasAndPost(canvas);}}public void mydrow(int x,int y){/* * 在屏幕的(x,y)位置绘制bitmap; * Rect(int left, int top, int right, int bottom) */int temp=y+bmp_h;if(temp<=0)temp=0;rect=new Rect(x,y,x+bmp_w,temp);try{//canvas=holder.lockCanvas(rect);canvas=holder.lockCanvas();//加上这里就不会有那个一闪的一闪的   if(canvas!=null){  // canvas.drawBitmap(bmp, matrix, paint)   //从left,top开始用paint  draw bmp;   //lock 需要lock矩形区域吗?  Log.e("canvas", "drow");  //canvas.save();  canvas.drawColor(Color.BLACK);  canvas.drawBitmap(data.bmp, 0, 0, null);  canvas.clipRect(rect); // canvas.drawColor(color.background_dark);   canvas.drawBitmap(bmp, x, y, null);  // canvas.restore();   }}finally{if(canvas!=null){holder.unlockCanvasAndPost(canvas);}}//test_drow();/* * 加上之后会出现奇怪的问题,源图像会覆盖掉 * 可以实现的方法是本地保存btimap * 这里面有提交两次,好像不行 */} public boolean onTouchEvent(MotionEvent event){ /*  * 重载获得x,y把星星或者小图片会知道指定的位置  * bmp-》创建canvas  * 屏幕上应该只有一个星星  */ Log.e("touch", "doing"); int action=event.getAction(); int  x=(int) event.getX(); int y=(int) event.getY(); mydrow(x,y); return true;}}


0 0