`
king_tt
  • 浏览: 2255915 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android View学习示例

 
阅读更多

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是构建用户界面的基本元素,它涵盖了屏幕上的每一个可视组件,如按钮、文本框、...通过这个"android之view学习示例",开发者可以深入学习如何创建、布局、绘制以及优化View,提升应用的用户体验。

    Compose 和 Android 传统View 互相调用 示例 Demo

    Compose 和 Android 传统View 互相调用 示例 Demo Sample,以及在双层嵌套(原生View嵌套Compose,Compose中又嵌套原生View)的情况下,在最外层原生View中,怎么获取到Compose内部的原生View。 具体详见我的博客 : ...

    Android MVP模式示例

    在Android开发中,MVP(Model-View-Presenter)模式是一种常见的设计模式,它将业务逻辑、用户界面和数据模型分离,使得代码更加结构化、可测试和易于维护。本示例将深入探讨如何在Android项目中应用MVP模式。 **一...

    Android 学习代码示例和课件讲解

    "Android学习代码示例和课件讲解"资源包提供了一套全面的学习材料,包括代码示例和配套课件,旨在帮助初学者快速理解和掌握Android Studio的编程技术。 首先,我们来看"android开发配书源码示例.rar"这个文件。这...

    Android ListView简单示例

    本示例将详细介绍如何在Android Studio中创建一个简单的ListView。首先,我们需要理解ListView的基本结构和工作原理。 ListView是一个可滚动的视图,它能显示一组垂直排列的数据项。在Android中,通常使用Adapter来...

    android 播放视频示例

    本示例将深入讲解如何在Android应用中实现视频播放功能,结合提供的压缩包文件`Examples_07_03`,我们可以探讨以下几个关键知识点: 1. **VideoView组件**: `VideoView`是Android SDK提供的一种用于播放视频的...

    Android应用教学示例

    总之,Android应用教学示例是一个提高用户体验的关键要素,通过精心设计的蒙版和教学提示,开发者可以有效地引导用户熟悉应用,减少用户学习成本,从而提升应用的整体评价。在实际开发中,应注重教学提示的简洁性和...

    Android学习示例_自己使用

    【Android学习示例_自己使用】是一个专门为个人学习Android编程准备的资源集合,包含了各种控件的示例代码。这个压缩包旨在帮助开发者理解和实践Android应用开发中的常见元素,通过实际代码来加深对Android API的...

    Android DrawerLayout 示例代码

    综上所述,Android的DrawerLayout提供了创建滑动抽屉效果的功能,它结合了`DrawerLayout`、`NavigationView`等组件,可以轻松实现类似Google应用的导航抽屉效果。在实际开发中,你可以根据需求进行自定义,例如添加...

    android之surfaceview学习示例

    在这个"android之surfaceview学习示例"中,我们将深入探讨SurfaceView的核心特性和使用方法。 首先,SurfaceView拥有自己的Surface对象,它位于窗口的最底层,直接与硬件交互,允许在主线程之外进行绘制操作,避免...

    Android实现View拖动 可拖动窗口 View 示例ViewDragHelper

    `ViewDragHelper`是Android SDK提供的一种工具类,用于帮助开发者处理View的拖放操作,它可以方便地实现View在父容器内的拖动功能。下面我们将详细探讨`ViewDragHelper`的工作原理和如何在实际项目中应用。 首先,`...

    Android MVP架构简单示例

    Android MVP架构是一种流行的设计模式,尤其在开发复杂的Android应用程序时被广泛应用。该模式的主要目标是分离用户界面(UI)...学习并实践这个示例,你将能够更好地掌握Android应用的架构设计,提升你的开发技能。

    android代码示例常见

    11. **动画(Animations)**:Android提供了多种动画效果,如属性动画(Property Animation)、视图动画(View Animation)等。掌握如何创建和应用动画,可以提升用户体验。 12. **第三方库集成**:Android生态中有...

    android 漂浮窗口示例源码

    开发者可以参考这个示例源码来学习和理解如何在Android上创建具有漂浮效果的UI元素。 在实际应用中,漂浮窗口可以用于多种场景,如音乐播放的歌词同步、即时通讯应用的浮动聊天窗口、阅读应用的书签标记等。但需要...

    android mvp架构示例

    Android MVP架构示例详解 MVP(Model-View-Presenter)是一种常见的软件设计模式,尤其在Android开发中被广泛采用,以实现清晰的代码...对于想要学习或改进Android应用设计模式的人来说,这是一个非常有价值的资源。

    Android popupwindow 示例程序一

    在这个"Android PopupWindow 示例程序一"中,通过实践和测试,开发者不仅学习了如何创建PopupWindow,还了解了如何定位PopupWindow以及处理其内部控件的事件。这个项目是一个很好的起点,帮助开发者深入理解...

    Android开发SDK示例

    在Android开发过程中,...总之,“Android开发SDK示例”提供了一条学习和精通Android开发的途径,通过实践与理论相结合,开发者可以更有效地掌握Android平台的各个方面,从而创建出功能丰富、用户体验优秀的应用程序。

    Android示例大全

    这个资源包包含了丰富的示例代码,让开发者能够通过实际操作来学习Android编程。 **一、Android基础组件使用** Android系统的基础组件包括Activity、Service、BroadcastReceiver、ContentProvider和Intent。在...

    android多选ListView示例

    在本示例中,我们将探讨如何实现一个支持多选功能的ListView,即"android多选ListView示例"。 一、ListView的多选模式 默认情况下,ListView处于单选模式,即每次只能选择一个条目。要启用多选模式,我们需要使用...

    Android textView应用简单示例.zip

    在Android开发中,TextView是用于显示文本的基本组件,它...以上就是关于这个"Android textView应用简单示例"的基本知识点,通过学习和实践这些内容,开发者可以更好地理解和运用TextView来创建丰富的Android用户界面。

Global site tag (gtag.js) - Google Analytics