View 和surfaceView
来源:互联网 发布:office2013激活软件 编辑:程序博客网 时间:2024/05/13 10:44
Android游戏开发中,常用的视图有View,SurfaceView和GLSurfaceView他们的关系是:
GLSurfaceView ------->SurfaceView--------->View,其中GLSurfaceView是专用于3D游戏开发的视图
1、View
一般自定义View继承与View,重写View中的方法,最重要的重写onDraw
<span style="font-size:18px;">package com.example.game_base0;import android.R.integer;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;public class MyView extends View {private int textX=50,textY=50;public MyView(Context context) {super(context);setFocusable(true);setFocusableInTouchMode(true);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {return super.onKeyDown(keyCode, event);}@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {return super.onKeyUp(keyCode, event);}@Overridepublic boolean onTouchEvent(MotionEvent event) {setFocusableInTouchMode(true);int x=(int) event.getX();int y=(int) event.getY();if(event.getAction()==MotionEvent.ACTION_CANCEL){textX=x;textY=y;}else if(event.getAction()==MotionEvent.ACTION_MOVE){textX=x;textY=y;}else if(event.getAction()==MotionEvent.ACTION_UP){textX=x;textY=y;}invalidate();return true;}@Overrideprotected void onDraw(Canvas canvas) {//创建画笔Paint paint=new Paint();//设置画笔颜色paint.setColor(Color.RED);paint.setTextSize(30);//绘制文本canvas.drawText("I", textX, textY, paint);paint.setColor(Color.BLUE);canvas.drawText("Love", textX, textY+50, paint);paint.setColor(Color.LTGRAY);canvas.drawText("YOU,", textX, textY+100, paint);paint.setColor(Color.WHITE);canvas.drawText("YOU", textX, textY+150, paint);paint.setColor(Color.MAGENTA);canvas.drawText("Known", textX, textY+200, paint);paint.setColor(Color.GREEN);canvas.drawText("?", textX, textY+250, paint);super.onDraw(canvas);}}</span>
<span style="font-size:18px;">package com.example.game_base0;import android.os.Bundle;import android.app.Activity;import android.graphics.Color;import android.view.Menu;import android.view.Window;import android.view.WindowManager;public class Main extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/*//隐去标题栏this.requestWindowFeature(Window.FEATURE_NO_TITLE);*///隐去状态栏this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);MyView myView=new MyView(this);myView.setBackgroundColor(Color.BLACK);setContentView(myView);}}</span>
因为要给View设置监听,所以必须把View设置为焦点,setfocusable(true)
重绘画布的两个方法:invalidate()和postInvalidate()
2、SurfaceView
在重写SurfaceView时,没有重写onDraw(),使用SurfaceView时,并不会与surfaceView直接打交道,而是通过SurfaceHolder来控制,通过SurfaceHolder可以获得Canvas,通过canvas绘制内容
因为SurfaceView的绘图方法是自己的定义的,所以刷屏需要自己写,所谓的刷屏,我认为:就是覆盖原有的图片
常见的有以下几种方法
1、在画布上填充一种颜色
<span style="font-size:18px;">private void myDraw() {Canvas canvas=sfh.lockCanvas();canvas.drawColor(Color.BLACK);paint.setTextSize(60);canvas.drawText("Game", textX, textY, paint);sfh.unlockCanvasAndPost(canvas);}</span>
2、在每次画图前,绘制一张等同于屏幕大小的图形覆盖在画布上
<span style="font-size:18px;">private void myDraw() {Canvas canvas=sfh.lockCanvas();//canvas.drawColor(Color.BLACK);paint.setColor(Color.WHITE);canvas.drawRect(0, 0, this.getWidth(), this.getHeight(), paint);paint.setTextSize(60);paint.setColor(Color.BLUE);canvas.drawText("Game", textX, textY, paint);sfh.unlockCanvasAndPost(canvas);}</span>
注意下,画笔的颜色设置
3、每次绘图前,指定RGB来填充画布,
我感觉就是第一种方法
只是调用的方法不同而已
canvas.drawRGB(r, g, b)
(4)每次绘图前绘制一张等同于屏幕大小的图片覆盖在画布上
<span style="font-size:18px;">package com.example.game_base1;import android.R.integer;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class MySurfaceView extends SurfaceView implements Callback {private SurfaceHolder sfh;private Paint paint;private int textX=100,textY=100;public MySurfaceView(Context context) {super(context);//实例化surfholdersfh=this.getHolder();//为surfholder添加监听sfh.addCallback(this);//实例化画笔paint=new Paint();paint.setColor(Color.WHITE);setFocusable(true);}@Overridepublic boolean onTouchEvent(MotionEvent event) {textX=(int) event.getX();textY=(int) event.getY();myDraw();return true;}@Overridepublic void surfaceCreated(SurfaceHolder holder) {myDraw();}private void myDraw() {Canvas canvas=sfh.lockCanvas();canvas.drawColor(Color.BLACK);paint.setTextSize(60);canvas.drawText("Game", textX, textY, paint);sfh.unlockCanvasAndPost(canvas);}@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}}</span>
顺便说下全屏的一些设置
隐去标题栏
用程序实现
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
隐去状态栏
his.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
用配置文件实现
隐去标题
android:theme="@android : style/Theme.NoTitleBar"
隐去状态栏
android:theme="@android : style/Theme.NoTitleBar。Fullscreen"
- View和SurfaceView区别
- SurfaceView和View
- SurfaceView和View区别
- View和SurfaceView
- SurfaceView 和 View 区别
- View 和surfaceView
- view、SurfaceView和GLSurfaceView
- surfaceView和View区别
- SurfaceView 和 View的区别
- SurfaceView 和 View的区别
- SurfaceView和View的区别
- android之View和SurfaceView
- Android之View和SurfaceView
- Android中View和SurfaceView
- Android之View和SurfaceView
- Android之View和SurfaceView
- surfaceView和View的区别
- View类和surfaceView类
- 关于建滔项目新增组织在生成销售出库单的加减价计算时不正确的问题
- ios 应用内跳转到系统设置界面的最好写法
- LRU cache的一个简单实现
- 作为一个新人,怎样学习嵌入式Linux?(韦东山)
- findmaven的英文版本上线了
- View 和surfaceView
- 有图有真相:一身行头七万八 想做花儿不容易
- [Visual Studio & Xamarin] 开发架构(二)-Repository与Entity Framework
- 网站优化误区有哪些,怎么样做网站的内容?
- Struts2动态方法调用,找不到Action
- Hibernate基本手法
- androi开发中,如何避免内存泄露 .
- hive参数——深入浅出学Hive
- 港媒称李心洁考虑离婚 张艾嘉对彭顺怒不可遏