Android中使用SurfaceView的方法
SurfaceView在游戏开发中有着举足轻重的地位,它对于画面的控制有着更大的自由度
(不像View要用handler来更新,关于View的),但这方面的参考资料并不是太多,能找到的例子都有点喧宾夺主的感觉,
不能把使用的流程清晰展示出来,下面是个简单的示例,力求把流程清楚展示,其他的可简则简。
程序效果:用线程画一个蓝色的长方形。
package com.ray.test;
/*
* SurfaceView的示例程序
* 演示其流程
*/
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class Test extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}
//内部类
class MyView extends SurfaceView implements SurfaceHolder.Callback{
SurfaceHolder holder;
public MyView(Context context) {
super(context);
holder = this.getHolder();//获取holder
holder.addCallback(this);
//setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
new Thread(new MyThread()).start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
//内部类的内部类
class MyThread implements Runnable{
@Override
public void run() {
Canvas canvas = holder.lockCanvas(null);//获取画布
Paint mPaint = new Paint();
mPaint.setColor(Color.BLUE);
canvas.drawRect(new RectF(40,60,80,80), mPaint);
holder.unlockCanvasAndPost(canvas);//解锁画布,提交画好的图像
}
}
}
}
分享到:
相关推荐
本篇文章将深入探讨如何在Android应用中使用SurfaceView来播放视频文件。 首先,我们需要了解SurfaceView的核心组件: 1. **Surface**: 这是SurfaceView内部的一个特殊缓冲区,用于渲染图像。当视频播放器(如...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理视频播放、游戏渲染等高性能图形操作时,它的优势在于拥有独立于主线程的渲染机制,能避免阻塞UI更新。然而,由于其特殊的性质,直接通过常规...
1.最近的项目中,有一个Activity用到Fragment+ViewPager,其中一个fragment中实现了视频播放的功能,包含有SurfaceView。结果,每次打开程序第一次进入到该Activity时都会闪屏黑一下。原因就出在SurfaceView。 详解:...
解决这个问题的一种方法是使用 `FrameLayout` 或 `RelativeLayout` 作为容器来管理 `SurfaceView` 和其他组件。这样,你可以设置 `SurfaceView` 的层次关系,使其位于背景,而其他组件则置于前景。例如: ```xml ...
在Android开发中,SurfaceView是一个非常重要的视图组件,它为开发者提供了在应用程序中实现高性能图形绘制的能力,常用于视频播放、游戏开发等场景。SurfaceView的特性使其能够在单独的线程中进行渲染,从而避免了...
Android开发摄像头SurfaceView预览 背景画图(矩形和圆形) 实现(双surfaceview,顶层画矩形框,底层预览视频); UI:三个按钮 预览 摄像 图片保存,预览界面 可以显示(矩形和圆形等图画)
使用Bitmap对象加载图片,然后在onDraw()方法中使用Canvas绘制图片。可以使用Matrix来控制图片的平移、缩放和旋转。 ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_...
在SurfaceView中,我们需要通过SurfaceHolder获取Canvas对象来进行绘制操作。 #### 三、实现SurfaceView的基本步骤 ##### 1. 创建SurfaceView实例 首先,需要创建一个继承自SurfaceView的类,并实现`...
4. **开启相机预览**:在自定义的SurfaceView中,你需要设置一个`SurfaceHolder.Callback`,在`SurfaceCreated()`方法中初始化相机,并在`SurfaceChanged()`方法中调整相机预览的尺寸以匹配SurfaceView的大小。...
7. **生命周期管理**: 在Android应用中,SurfaceView有自己的生命周期,需要在Activity的onCreate、onResume、onPause和onDestroy等方法中适当地初始化、恢复、暂停和释放SurfaceView。 8. **布局嵌套与交互**: ...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在应用程序中创建高性能的图形界面,比如游戏或者视频播放器。通常,SurfaceView有一个独立的渲染线程,用于处理高耗时的图形操作,以避免阻塞主线程,...
本压缩包资料主要探讨如何在SurfaceView中添加其他组件,并确保这些组件不会被SurfaceView覆盖,从而实现更复杂的用户界面设计。 SurfaceView的工作原理在于它拥有自己的窗口层,直接与硬件交互,因此它的渲染性能...
AnimateViewActivity这个名字暗示这是一个演示如何在View或者SurfaceView中实现动画的示例。在Android中,可以使用各种方法实现动画,如属性动画(Property Animation)、帧动画(Frame Animation)和补间动画...
在Android开发中,`SurfaceView`是一个特殊类型的`View`,它允许开发者在应用程序中创建一个独立于应用程序主线程的渲染表面。`SurfaceView`通常用于处理高性能的图形或者视频播放,因为它可以在单独的线程中进行...
该资源是一个完整的android项目,主要是利用surfaceview和android的重力传感器实现自由落体的模拟,包括碰撞和瞬间改变重力加速度的方向等。该案例是我模拟物理引擎的一个例子,主要是参照“动量守恒定律”和“动能...
### Android App中使用SurfaceView制作多线程动画的实例讲解 #### SurfaceView的定义与应用场景 在Android开发中,为了确保应用的流畅性和响应性,通常需要将耗时操作(如网络请求)放在非UI线程中进行。然而,...
总之,通过SurfaceView实现实时显示摄像头视频是Android开发中的一个基础任务,涉及到对Android系统相机API的理解和使用,以及对SurfaceView生命周期的掌握。随着技术的发展,开发者可以选择更高级的API,如Camera2...
本文将深入探讨SurfaceView的使用方法、注意事项以及实际应用中的范例。 一、SurfaceView的基本概念 SurfaceView是Android系统提供的一种特殊视图,它拥有一个独立于应用程序主线程的Surface,可以在后台线程中...
【Android UI】SurfaceView中使用 Canvas 绘制可缩放大图 ( 拖动和缩放相关的变量 | Canvas 绘图函数 | 手势识别 多点触控流程 | 拖动图片 | 缩放图片 ) 博客链接:...
在Android中,除了预览之外,我们还可以使用Camera类的startRecording()和stopRecording()方法进行视频录制。需要注意的是,录制视频可能需要更复杂的设置,如设置输出文件路径、编码器参数等。 以上内容概括了...