实现Button悬浮于与SurfaceView之上实现
先看效果:
注意:你实现的SurfaceView和android中的Button,EditView是同级的,不能把一个包含在另一个里面
1.创建自己的SurfaceView类,一定要实现2个参数的那个函数,因为你要在XMl中使用,第二个参数指的自定义的组件的一些属性长宽等。
public GameSurfaceView(Context context, AttributeSet attrs){
super(context,attrs);
}
<dk.game.GameSurfaceView android:id="@+id/gameView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
2.处理SurfaceView中事件一定要在Activity中。我们在xml中定义我们的surfaceview 和 组件button、textview等等的时候 他们是同一级别的!!而不是把button包含在surfaceview里,所以虽然在surfaceview中可以根据id索引到button但绑定的时候是无法找到button的,只有我们的 activitysetContentView(R.layout.main); 显示的button,所以只能在显示它的activity中去绑定,这里需要注意
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
}
/**
* 下一张按钮事件
* @param view
*/
public void nextBt(View view){
GameSurfaceView.cn=2;
}
/**
* 上一张按钮事件
* @param view
*/
public void preBt(View view){
GameSurfaceView.cn=1;
}
3.在Layout中是相对布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<dk.game.GameSurfaceView android:id="@+id/gameView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<Button
android:id="@+id/nextBt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:text="下一张"
android:onClick="nextBt" />
<Button
android:id="@+id/preBt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/nextBt"
android:layout_alignParentBottom="true"
android:text="上一张"
android:onClick="preBt" />
</RelativeLayout>
GameSurfaceView类的源码如下
package dk.game;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameSurfaceView extends SurfaceView implements Runnable ,SurfaceHolder.Callback{
private Thread gameViewThread;
private SurfaceHolder surfaceHolder;
private Paint paint;
private boolean runFlag=false;
public static int screen_width,screen_height;
protected Resources resources;
private Canvas canvas;
private Bitmap bmp_bg1,bmp_bg2;
public static int cn=1;
public GameSurfaceView(Context context, AttributeSet attrs){
super(context,attrs);
init();
}
public GameSurfaceView(Context context) {
super(context);
init();
}
private void init(){
surfaceHolder=getHolder();
surfaceHolder.addCallback(this);
resources=getResources();
paint=new Paint();
paint.setAntiAlias(true);
bmp_bg1=BitmapFactory.decodeResource(getResources(), R.drawable.bg1);
bmp_bg2=BitmapFactory.decodeResource(getResources(), R.drawable.bg2);
// setFocusable(true);
// setFocusableInTouchMode(true);
// setClickable(true);
setKeepScreenOn(true);
}
public void draw(Canvas canvas,Paint paint){
canvas.drawColor(Color.BLACK);
if(cn==1){
canvas.drawBitmap(bmp_bg1, 0,0, paint);
}else if(cn==2){
canvas.drawBitmap(bmp_bg2, 0,0, paint);
}
}
@Override
public void run() {
while(runFlag){
try{
canvas=surfaceHolder.lockCanvas();
long startTime=System.currentTimeMillis();
canvas.drawColor(Color.BLACK);
draw(canvas,paint);
long endTime=System.currentTimeMillis();
if(50>(endTime-startTime)){
Thread.sleep(50-(endTime-startTime));
}
}catch (Exception e) {
Log.e("Error", "刷新屏幕出错!"+e);
}finally{
if(canvas!=null){
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
screen_width=getWidth();
screen_height=getHeight();
runFlag=true;
gameViewThread=new Thread(this);
gameViewThread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
runFlag=false;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}
}
源码下载:
- 大小: 78.8 KB
- 大小: 54.8 KB
分享到:
相关推荐
本文将深入探讨如何利用SurfaceView进行游戏开发,以及与之相关的技术点。 首先,SurfaceView是Android系统提供的一个特殊的视图,它拥有自己的Surface对象,这个Surface位于窗口的最底层,允许开发者直接在其上...
本示例“Android开发--仿景点通景区地图SurfaceView实现”聚焦于使用SurfaceView来创建一个交互式地图应用,提供了双击放大、多点触摸缩放、地图拖拽以及添加地图标记等功能。下面将详细阐述这些知识点: 1. **...
在Android开发中,`SurfaceView`是一个特殊类型的`View`,它允许开发者在应用程序中创建一个独立于应用程序主线程的渲染表面。`SurfaceView`通常用于处理高性能的图形或者视频播放,因为它可以在单独的线程中进行...
在Android平台上开发游戏时,SurfaceView是一个至关重要的组件,它为高效、低延迟的图形渲染提供了可能。SurfaceView是Android系统提供的一种特殊视图,它有自己的独立绘制表面,与主线程分离,使得游戏或者视频这类...
在Android平台上开发游戏时,SurfaceView是一个非常重要的组件。它提供了低延迟的显示功能,并且支持双缓冲机制,这对于实时渲染图像非常关键。相比于传统的View组件,SurfaceView在性能上有着显著的优势。 #### 二...
在Android游戏开发中,SurfaceView是一个非常重要的组件,它提供了高效、低延迟的图形渲染机制,特别适合用于游戏和实时视频等对性能要求较高的场景。本篇将详细讲解如何使用SurfaceView来实例控制角色移动。 首先...
第2章 游戏开发相关android基础知识 23 2.1 游戏中的音效 23 2.1.1 游戏中的即时音效 23 2.1.2 即时音效的一个案例 24 2.1.3 背景音乐播放技术 27 2.1.4 简易音乐播放器的实现 29 2.2 简单数据的...
在本文中,我们将深入探讨如何基于给定的“android游戏开发源码 体育游戏-----2D迷你桌球”项目进行Android游戏开发。这个项目使用了Java编程语言(JDK 1.6.0_18版本)和Android SDK 2.1,开发环境为Eclipse 3.5.1。...
本项目“Android-surfaceview-camera”专注于利用SurfaceView来实现一个自定义的相机应用。下面将详细介绍SurfaceView与Camera在Android开发中的应用及核心知识点。 1. **SurfaceView介绍** SurfaceView是Android...
在Android开发中,SurfaceView是一个非常重要的视图组件,它为开发者提供了在应用程序中实现高性能图形渲染的能力。SurfaceView的设计初衷是为了处理那些需要频繁更新且对性能要求较高的场景,如视频播放、游戏画面...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者创建高性能的图形界面,尤其适合处理视频播放或游戏等需要连续刷新的场景。本话题主要探讨如何利用SurfaceView实现图片的缩放和滑动功能。 首先,理解...
### Android游戏与应用开发最佳学习路线图 #### 一、路线图概览 本学习路线图旨在为初学者提供一个全面且系统的学习路径,帮助其掌握Android应用与游戏开发的核心技能。通过本路线图的学习,学员将能够从零开始...
1.Android游戏开发之旅一 长按Button原理 2.Android游戏开发之旅二 View和SurfaceView 3.Android游戏开发之旅三 View类详解 4.Android游戏开发之旅四 Canvas和Paint实例 5.Android游戏开发之旅五 Path和Typeface...
《基于JBox2D的Android游戏开发全源码》是一个非常适合Android开发初学者以及毕业设计项目的实践案例。这个源码库包含了一款Android游戏的完整实现,它利用了JBox2D物理引擎来创建真实感的游戏环境。在这里,我们将...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理视频播放、游戏渲染等高性能图形操作时,它的优势在于拥有独立于主线程的渲染机制,能避免阻塞UI更新。然而,由于其特殊的性质,直接通过常规...
Android开发摄像头SurfaceView预览 背景画图(矩形和圆形) 实现(双surfaceview,顶层画矩形框,底层预览视频); UI:三个按钮 预览 摄像 图片保存,预览界面 可以显示(矩形和圆形等图画)
在Android开发中,实时显示摄像头视频是一个常见的需求,如创建相机应用、视频聊天或游戏等。`SurfaceView`是Android提供的一种用于高效显示多媒体数据的视图组件,尤其适合处理像视频流这样的实时数据。本篇文章将...
在Android平台上,SurfaceView是一种特殊的View,用于处理高性能、低延迟的图形绘制,尤其是在开发游戏或者视频播放等需要高效刷新率的应用时。本测试Demo旨在展示如何有效地利用SurfaceView进行游戏开发。以下是对...
总结起来,实现Android圆形相机预览窗口需要对SurfaceView有深入的理解,包括如何自定义视图、绘制路径以及与相机的交互。通过这个过程,开发者不仅可以创建独特的用户界面,还能提升应用程序的创新性和用户体验。在...