Android Button悬浮在SurfaceView上
实现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=;
}
/**
* 上一张按钮事件
* @param view
*/
public void preBt(View view){
GameSurfaceView.cn=;
}
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=; 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==){
canvas.drawBitmap(bmp_bg1, ,, paint);
}else if(cn==){
canvas.drawBitmap(bmp_bg2, ,, 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(>(endTime-startTime)){
Thread.sleep(-(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) {}
}
Android Button悬浮在SurfaceView上的更多相关文章
- Android游戏开发学习(5)--实现Button悬浮于与SurfaceView之上
原文:http://daikainan.iteye.com/blog/1407355 实现Button悬浮于与SurfaceView之上实现 先看效果: 注意:你实现的SurfaceView和andr ...
- Android捕捉图像后在SurfaceView上变形显示问题的处理
我们在Android中经常会使用SurfaceView编写自定义的摄像头,可是有的时候会经常会出现图像的变形,我们就会很郁闷的问这到底是为什么呢?其实这个最根本的原因是SurfaceView和PreV ...
- 我的Android进阶之旅------>android Button上面的英文字符串自动大写的问题解决
今天碰到一个关于Button的问题:android Button上面的英文字符串会自动变成大写,运行的Android 5.1版本,如下图所示: 图1:Button 图2:TextView 这个Butt ...
- 我的Android进阶之旅------>android Button上面的英文字符串自己主动大写的问题解决
今天碰到一个关于Button的问题:android Button上面的英文字符串会自己主动变成大写,执行的Android 5.1版本号,例如以下图所看到的: 图1:Button 图2:TextView ...
- Android 学习笔记之SurfaceView的使用+如何实现视频播放...
学习内容: 1.掌握Surface的使用... 2.Android中如何实现视频播放... 1.SurfaceView类的使用 在Android中,一般播放音频时我们可以去使用Android提供的 ...
- android桌面悬浮窗实现
首先是一个小的悬浮窗显示的是当前使用了百分之多少的内存,点击一下小悬浮窗,就会弹出一个大的悬浮窗,可以一键加速.好,我们现在就来模拟实现一下类似的效果. ...
- Android -- 桌面悬浮,QQ管家火箭实现
续上一篇博客<Android -- 桌面悬浮,仿360>,传送门:http://www.cnblogs.com/yydcdut/p/3909888.html,在此代码上继续添加实现. 比起 ...
- Android WindowManager悬浮窗:不需要申请权限实现悬浮
Android WindowManager悬浮窗:不需要申请权限实现悬浮 附录文章1介绍了Android平台上的悬浮窗WindowManager,WindowManager悬浮窗可以悬浮在And ...
- Android应用截图和SurfaceView截图问题总结
最近在做android截图应用的过程遇到很多问题,接触了好些截图方法,但是还是不能实现SufaceView截图功能.今天就把我尝试过的方法总结下,希望把我惨痛的经历写出来后能够帮助到要做此 ...
随机推荐
- 【转】ASP.NET MVC 使用 FluentScheduler 定时器计划任务
MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自 ...
- JavaScript高级程序设计(七):JavaScript中的in关键字
in 使用点一: 在js中,for--in用于遍历一个对象的属性,把对象的属性名和属性值都提出来. var obj = { "key1":"value1", & ...
- C#下如何用NPlot绘制期货股票K线图(1)?
[简介] 作为一名专业程序化交易者,编程是一个程序员的基本功,本文是作者在做的一个期货CTP项目中有关K线绘图的一部分,偿试类MT4中图表 设计而写,在编写绘图时,查阅了相关资料,感觉还是用NPlot ...
- Java JDK1.5、1.6、1.7新特性整理(转)
原文链接:http://www.cnblogs.com/tony-yang-flutter/p/3503935.html 一.Java JDK1.5的新特性 1.泛型: List<String& ...
- LNK1169 和 LNK2005
错误重现: 1> vs2010创建 C++ win32 project, Application type: DLL. 2>为了在工程中使用 CString, 在 stdafx.h 中 I ...
- 九度OJ 1510 替换空格
题目地址:http://ac.jobdu.com/problem.php?pid=1510 题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We ...
- OpenJudge 2786 Pell数列
1.链接地址: http://bailian.openjudge.cn/practice/2786 2.题目: 总Time Limit: 3000ms Memory Limit: 65536kB De ...
- OpenJudge/Poj 1844 Sum
1.链接地址: http://bailian.openjudge.cn/practice/1844 http://poj.org/problem?id=1844 2.题目: Sum Time Limi ...
- [翻译][MVC 5 + EF 6] 6:创建更复杂的数据模型
原文:Creating a More Complex Data Model for an ASP.NET MVC Application 前面的教程中,我们使用的是由三个实体组成的简单的数据模型.在本 ...
- 在linux CentOS6上安装web环境
感谢浏览,欢迎交流=.= 都说linux作为服务器优于window,近期也是学习了下linux. win7下安装了linux虚拟机,购买linux阿里云主机,开启linux之旅. 进入正题,在linu ...