View,是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展。
在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要。在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等。
游戏的核心是不断地绘图和刷新界面,Android中提供了 invalidate 方法来实现界面刷新。注意,invalidate 不能直接在线程中调用, 就是不可以在子线程中调用,因此它违背了 Android的单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI 线程中执行,因此Android中最常用的方法就是利用Handler来实现UI线程的更新。 其实用 AsyncTask 也可以。
具体示例:
Activity:
public class Activity01 extends Activity {
private static final String TAG = "mThread";
private static final int REFRESH = 0x000001;
private GameView mGameView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.mGameView = new GameView(this);
mGameView.x = 320.0f;
mGameView.y = 120.0f;
setContentView(mGameView);
new Thread(new GameThread()).start();
}
Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case Activity01.REFRESH:
mGameView.invalidate(); // repaint View
break;
}
super.handleMessage(msg);
}
};
class GameThread implements Runnable {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
Message message = new Message();
message.what = Activity01.REFRESH;
Activity01.this.myHandler.sendMessage(message);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
mGameView.x = event.getX();
mGameView.y = event.getY();
}
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
this.finish();
}
return true;
}
}
gameview
public class GameView extends View {
int count = 0;
float x = 0, y = 0;
public GameView(Context context) {
super(context);
}
public void onDraw(Canvas canvas) {
if (count < 100) {
count++;
} else {
count = 0;
}
Paint mPaint = new Paint();
switch (count % 4) {
case 0:
mPaint.setColor(Color.BLUE);
break;
case 1:
mPaint.setColor(Color.GREEN);
break;
case 2:
mPaint.setColor(Color.RED);
break;
case 3:
mPaint.setColor(Color.YELLOW);
break;
default:
mPaint.setColor(Color.WHITE);
break;
}
canvas.drawRect(x - 40, y - 20, x + 40, y + 20, mPaint);
}
}
运行效果:
源码下载
分享到:
相关推荐
在Android开发中,View是构建用户界面的基本元素,它涵盖了屏幕上的每一个可视组件,如按钮、文本框、...通过这个"android之view学习示例",开发者可以深入学习如何创建、布局、绘制以及优化View,提升应用的用户体验。
Compose 和 Android 传统View 互相调用 示例 Demo Sample,以及在双层嵌套(原生View嵌套Compose,Compose中又嵌套原生View)的情况下,在最外层原生View中,怎么获取到Compose内部的原生View。 具体详见我的博客 : ...
在Android开发中,MVP(Model-View-Presenter)模式是一种常见的设计模式,它将业务逻辑、用户界面和数据模型分离,使得代码更加结构化、可测试和易于维护。本示例将深入探讨如何在Android项目中应用MVP模式。 **一...
"Android学习代码示例和课件讲解"资源包提供了一套全面的学习材料,包括代码示例和配套课件,旨在帮助初学者快速理解和掌握Android Studio的编程技术。 首先,我们来看"android开发配书源码示例.rar"这个文件。这...
本示例将详细介绍如何在Android Studio中创建一个简单的ListView。首先,我们需要理解ListView的基本结构和工作原理。 ListView是一个可滚动的视图,它能显示一组垂直排列的数据项。在Android中,通常使用Adapter来...
本示例将深入讲解如何在Android应用中实现视频播放功能,结合提供的压缩包文件`Examples_07_03`,我们可以探讨以下几个关键知识点: 1. **VideoView组件**: `VideoView`是Android SDK提供的一种用于播放视频的...
总之,Android应用教学示例是一个提高用户体验的关键要素,通过精心设计的蒙版和教学提示,开发者可以有效地引导用户熟悉应用,减少用户学习成本,从而提升应用的整体评价。在实际开发中,应注重教学提示的简洁性和...
【Android学习示例_自己使用】是一个专门为个人学习Android编程准备的资源集合,包含了各种控件的示例代码。这个压缩包旨在帮助开发者理解和实践Android应用开发中的常见元素,通过实际代码来加深对Android API的...
综上所述,Android的DrawerLayout提供了创建滑动抽屉效果的功能,它结合了`DrawerLayout`、`NavigationView`等组件,可以轻松实现类似Google应用的导航抽屉效果。在实际开发中,你可以根据需求进行自定义,例如添加...
在这个"android之surfaceview学习示例"中,我们将深入探讨SurfaceView的核心特性和使用方法。 首先,SurfaceView拥有自己的Surface对象,它位于窗口的最底层,直接与硬件交互,允许在主线程之外进行绘制操作,避免...
`ViewDragHelper`是Android SDK提供的一种工具类,用于帮助开发者处理View的拖放操作,它可以方便地实现View在父容器内的拖动功能。下面我们将详细探讨`ViewDragHelper`的工作原理和如何在实际项目中应用。 首先,`...
Android MVP架构是一种流行的设计模式,尤其在开发复杂的Android应用程序时被广泛应用。该模式的主要目标是分离用户界面(UI)...学习并实践这个示例,你将能够更好地掌握Android应用的架构设计,提升你的开发技能。
11. **动画(Animations)**:Android提供了多种动画效果,如属性动画(Property Animation)、视图动画(View Animation)等。掌握如何创建和应用动画,可以提升用户体验。 12. **第三方库集成**:Android生态中有...
开发者可以参考这个示例源码来学习和理解如何在Android上创建具有漂浮效果的UI元素。 在实际应用中,漂浮窗口可以用于多种场景,如音乐播放的歌词同步、即时通讯应用的浮动聊天窗口、阅读应用的书签标记等。但需要...
Android MVP架构示例详解 MVP(Model-View-Presenter)是一种常见的软件设计模式,尤其在Android开发中被广泛采用,以实现清晰的代码...对于想要学习或改进Android应用设计模式的人来说,这是一个非常有价值的资源。
在这个"Android PopupWindow 示例程序一"中,通过实践和测试,开发者不仅学习了如何创建PopupWindow,还了解了如何定位PopupWindow以及处理其内部控件的事件。这个项目是一个很好的起点,帮助开发者深入理解...
在Android开发过程中,...总之,“Android开发SDK示例”提供了一条学习和精通Android开发的途径,通过实践与理论相结合,开发者可以更有效地掌握Android平台的各个方面,从而创建出功能丰富、用户体验优秀的应用程序。
这个资源包包含了丰富的示例代码,让开发者能够通过实际操作来学习Android编程。 **一、Android基础组件使用** Android系统的基础组件包括Activity、Service、BroadcastReceiver、ContentProvider和Intent。在...
在本示例中,我们将探讨如何实现一个支持多选功能的ListView,即"android多选ListView示例"。 一、ListView的多选模式 默认情况下,ListView处于单选模式,即每次只能选择一个条目。要启用多选模式,我们需要使用...
在Android开发中,TextView是用于显示文本的基本组件,它...以上就是关于这个"Android textView应用简单示例"的基本知识点,通过学习和实践这些内容,开发者可以更好地理解和运用TextView来创建丰富的Android用户界面。