SurfaceView在游戏开发中有着举足轻重的地位,它对于画面的控制有着更大的自由度(不像View要用handler来更新)
package com.Aina.Android;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
/**
* com.Aina.Android Pro_SurfaceView
*
* @author Aina.huang E-mail: 674023920@qq.com
* @version 创建时间:2010 Jun 9, 2010 11:22:35 AM 类说明
*/
public class MyView extends SurfaceView implements SurfaceHolder.Callback,
Runnable {
private SurfaceHolder holder;
public static int x = 100, y = 100;
public MyView(Context context) {
super(context);
Log.i("TAG", "MyView()");
holder = this.getHolder();
holder.addCallback(this);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Log.i("TAG", "surfaceChanged()");
}
public void surfaceCreated(SurfaceHolder holder) {
new Thread(this).start();
Log.i("TAG", "surfaceCreated()");
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i("TAG", "surfaceDestroyed()");
}
public void run() {
try {
while (!Thread.currentThread().isInterrupted()) {
synchronized (holder) {
this.onDraw();
}
Thread.sleep(100);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void onDraw() {
Canvas canvas = holder.lockCanvas();
Paint paint = new Paint();
paint.setColor(Color.BLACK);
Log.i("TAG", canvas.getWidth() + "|" + canvas.getHeight());
canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paint);
paint.setColor(Color.RED);
paint.setAntiAlias(true);
canvas.drawCircle(x, y, 30, paint);
// canvas.drawRect(x, y, a, b, paint);
holder.unlockCanvasAndPost(canvas);
}
}
package com.Aina.Android;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
public class Test_SurfaceView extends Activity {
/** Called when the activity is first created. */
private MyView mv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mv = new MyView(this);
setContentView(mv);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_DOWN:// 向下
MyView.y += 5;
break;
case KeyEvent.KEYCODE_DPAD_UP:// 向上
MyView.y -= 5;
break;
case KeyEvent.KEYCODE_DPAD_LEFT:// 向左
MyView.x -= 5;
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:// 向右
MyView.x += 5;
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
MyView.x = x;
MyView.y = y;
return super.onTouchEvent(event);
}
}
分享到:
相关推荐
**Android SurfaceView 使用详解** `SurfaceView` 是 Android 系统提供的一种特殊的视图组件,它允许开发者在应用程序中创建高性能的图形界面,比如游戏、视频播放器等需要连续更新图像的应用。`SurfaceView` 提供...
1. 使用TextureView:TextureView是Android 4.0(API Level 14)引入的,它提供了一种在UI层面上处理视频和图形的方式,与SurfaceView相比,它支持更多的交互和动画效果。控件可以直接添加到TextureView上,但需要...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者创建高性能的图形界面,尤其适合处理视频播放或游戏等需要连续刷新的场景。本话题主要探讨如何利用SurfaceView实现图片的缩放和滑动功能。 首先,理解...
android使用双缓冲辨析及surfaceview使用例子
在Android开发中,`SurfaceView`是一个特殊类型的`View`,它允许开发者在应用程序中创建一个独立于应用程序主线程的渲染表面。`SurfaceView`通常用于处理高性能的图形或者视频播放,因为它可以在单独的线程中进行...
`SurfaceView`是Android提供的一种用于高效显示多媒体数据的视图组件,尤其适合处理像视频流这样的实时数据。本篇文章将深入探讨如何利用`SurfaceView`实现实时显示摄像头视频。 首先,我们需要了解`SurfaceView`的...
在Android开发中,`SurfaceView`是一个非常重要的组件,它提供了与硬件图形渲染直接交互的能力。这个项目"android surfaceview自定义拍照 绘制头像轮廓"是基于网上现有的示例代码进行了修改,用于实现一个自定义的...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理视频播放、游戏渲染等高性能图形操作时,它的优势在于拥有独立于主线程的渲染机制,能避免阻塞UI更新。然而,由于其特殊的性质,直接通过常规...
例如,可以使用`android:layout_marginTop`属性来让其他View在SurfaceView之上,但注意这可能会部分遮挡SurfaceView的内容。 另一种解决方案是使用`OverlayLayer`。Android提供了一个叫做`TextureView`的类,它也...
本篇文章将深入探讨如何在Android应用中使用SurfaceView来播放视频文件。 首先,我们需要了解SurfaceView的核心组件: 1. **Surface**: 这是SurfaceView内部的一个特殊缓冲区,用于渲染图像。当视频播放器(如...
1. **使用FrameLayout或RelativeLayout**:将SurfaceView和其他View放入同一个布局容器(如FrameLayout或RelativeLayout),然后通过设置布局参数(如`android:layout_above`或`android:layout_below`)来控制组件的...
在Android平台上开发游戏时,SurfaceView是一个至关重要的组件,它为高效、低延迟的图形渲染提供了可能。SurfaceView是Android系统提供的一种特殊视图,它有自己的独立绘制表面,与主线程分离,使得游戏或者视频这类...
总的来说,实现"android SurfaceView做二维码扫描源码"涉及到Android的SurfaceView使用、摄像头控制、图像处理以及第三方库的集成等多个技术点。理解并掌握这些知识点,才能开发出高效稳定的二维码扫描应用。
因此,SurfaceView使用了多线程技术,将耗时的绘图任务移到后台线程,避免阻塞主线程,提高用户体验。 3. **滑块组件**:这个示例中的滑块可能是一个自定义控件,用户可以通过滑动来选择一组按钮。实现这种效果可能...
android中的surfaceview示例源码下载,Android SurfaceView在游戏开发中使用想当广泛,SurfaceView对于画面的控制有着更大的自由度,它不像View那样要用handler来更新,但是网上关于 SurfaceView使用这方面的参考...
- **双缓冲技术**:使用SurfaceView的双缓冲特性,先在后台缓冲区绘制下一帧,再将缓冲区内容复制到前台,减少闪烁。 - **合理计算帧率**:根据设备性能和动画复杂度,确定合适的帧率,过高可能导致性能问题,过低...
这个场景就涉及到了Android的SurfaceView以及如何定制它的显示效果。本文将深入探讨如何实现一个圆形的相机预览窗口。 首先,让我们理解SurfaceView的基本概念。SurfaceView是Android系统提供的一种用于显示多媒体...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在单独的线程中进行高性能的图形绘制,常用于游戏或者视频播放等需要连续更新显示内容的场景。本篇文章将详细探讨如何利用SurfaceView实现动画效果,...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理高性能图形和视频渲染时。`SurfaceView`提供了直接与硬件图形管道交互的能力,使得开发者可以在单独的线程中进行绘制,从而避免阻塞UI主线程,...
总之,通过SurfaceView实现实时显示摄像头视频是Android开发中的一个基础任务,涉及到对Android系统相机API的理解和使用,以及对SurfaceView生命周期的掌握。随着技术的发展,开发者可以选择更高级的API,如Camera2...