Android surfaceview使用——重载onTouchEvent
来源:互联网 发布:免费开淘宝店流程视频 编辑:程序博客网 时间:2024/06/06 00:56
surface上绘制bitmap,同时重载onTouchEnvetimport 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;}}
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
- Android surfaceview使用——重载onTouchEvent
- android+SurfaceView+path+onTouchEvent画图
- Android开发——SurfaceView使用总结
- android学习笔记——onTouchEvent方法的使用
- Android之MediaPlayer——SurfaceView的简单使用
- Android Camera2拍照(一)——使用SurfaceView
- android中使用2D动画 — SurfaceView 转载
- Android的SurfaceView使用
- Android surfaceview使用详解
- [Android] SurfaceView使用实例
- Android SurfaceView使用 笔记
- Android SurfaceView使用
- Android SurfaceView使用详解
- [Android] SurfaceView使用实例
- android中surfaceView使用
- [Android] SurfaceView使用实例
- [Android] SurfaceView使用实例
- Android使用SurfaceView画图
- @+id/android:list"和"@android:id/list"的写法
- BOOST_PP_CAT宏
- 常量指针与指针常量
- redis配置文件redis.conf参数说明
- [LeetCode] 3Sum
- Android surfaceview使用——重载onTouchEvent
- 大小之差
- asp.net如何把文件上传到另外一台服务器
- leetcode: Binary Tree Inorder Traversal
- MySQL主从安装
- asp.net程序防止sql注入
- cocos2dx常见的46中+22中动作详解
- EXCEL:读取ACCESS数据库中指定表数据到EXCEL
- NYOJ-975-关于521