- 浏览: 576146 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
hxlniada:
[color=darkred][/color][size=sm ...
利用Handler来更新android的UI -
jack_ye:
...
检测Android中触摸屏手势的动作与坐标 -
z278013421:
Android Services使用示例 -
东方vs不败:
写的不错,挺好的
利用Handler来更新android的UI -
liangxping:
就是双缓存机制而已。
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);//解锁画布,提交画好的图像 } } } }
- TestSurfaceView0.1.rar (25.6 KB)
- 下载次数: 2663
评论
14 楼
liangxping
2013-09-03
就是双缓存机制而已。
13 楼
bq49
2010-06-29
raymondlueng 写道
ansili 写道
那如果我想在上次画的基础上接着画呢?。
也就是说我第一次在surfaceview 画了一个方块,再次接到用户的动作时在上次所画结果上接着在surfaceview 再画一个方块.此时surfaceview 上已经存在两个方块了。
surfaceview 能否胜任? 需要怎么做?
也就是说我第一次在surfaceview 画了一个方块,再次接到用户的动作时在上次所画结果上接着在surfaceview 再画一个方块.此时surfaceview 上已经存在两个方块了。
surfaceview 能否胜任? 需要怎么做?
如果要保留当前的接着画,SurfaceView是无法做到的!
=============应该是可以的!SurfaceView绘制无非也就是用的Canvas,只要获得了这个Canvas就可以画了!这个效果应该就是差不多的例子吧!
http://sean.huanglijiang.com/article.asp?id=227
12 楼
nsm1168
2009-12-16
可以看看这里的介绍 如何在surfaceview里实现有停頓的計時性繪圖!
http://android.tgbus.com/Android/tutorial/200812/171431.shtml
http://android.tgbus.com/Android/tutorial/200812/171431.shtml
11 楼
brumby007
2009-10-21
期待答案中……,同样顶一个
10 楼
jjcang
2009-10-21
这个不错,顶一个
9 楼
brumby007
2009-10-11
谢谢楼上大哥的回复,可是不知道为什么在lunarlander里面是这样实现的,也没有做sleep,我看logcat打出来的东西是一直在狂刷的:
而且如果我用sleep的话,物体移动会有明显卡住的感觉。不知道是怎么回事?
小弟初学,还请赐教
public void run() { while (mRun) { Canvas c = null; try { c = mSurfaceHolder.lockCanvas(null); synchronized (mSurfaceHolder) { if (mMode == STATE_RUNNING) updatePhysics(); Log.d("test", ">>>>>>>>>>>>dodraw"); doDraw(c); } } finally { // do this in a finally so that if an exception is thrown // during the above, we don't leave the Surface in an // inconsistent state if (c != null) { mSurfaceHolder.unlockCanvasAndPost(c); } } } }
而且如果我用sleep的话,物体移动会有明显卡住的感觉。不知道是怎么回事?
小弟初学,还请赐教
8 楼
vlinux
2009-10-11
brumby007 写道
我明白了,更新画面时不用sleep,看LunarLander的例子里更新UI的线程也是一直狂跑的,占满了一个CPU
你错了,如果你不sleep而狂刷,你会发现不仅你的短信、电话等后台程序工作缓慢,而且你还能看到如下的警告信息
引用
10-11 13:20:01.534: WARN/SurfaceComposerClient(1938): lock_layer timed out (is the CPU pegged?) layer=1, lcblk=0x424d00a0, state=00000011 (was 00000012)
10-11 13:20:01.534: WARN/SurfaceFlinger(99): executeScheduledBroadcasts() skipped, contention on the client. We'll try again later...
10-11 13:20:01.534: WARN/SurfaceComposerClient(1938): lock_layer() timed out but didn't appear to need to be locked and we recovered (layer=1, lcblk=0x424d00a0, state=00000001)
10-11 13:20:01.534: WARN/SurfaceFlinger(99): executeScheduledBroadcasts() skipped, contention on the client. We'll try again later...
10-11 13:20:01.534: WARN/SurfaceComposerClient(1938): lock_layer() timed out but didn't appear to need to be locked and we recovered (layer=1, lcblk=0x424d00a0, state=00000001)
所以,在lock之外sleep是非常必要滴
7 楼
brumby007
2009-10-11
我明白了,更新画面时不用sleep,看LunarLander的例子里更新UI的线程也是一直狂跑的,占满了一个CPU
6 楼
brumby007
2009-09-22
<div class="quote_title">raymondlueng 写道</div>
<div class="quote_div">
<p>SurfaceView在游戏开发中有着举足轻重的地位,它对于画面的控制有着更大的自由度(<a title="利用Handler来更新Android UI" href="/blog/411860" target="_blank">不像View要用handler来更新,关于View的</a>),但这方面的参考资料并不是太多,能找到的例子都有点喧宾夺主的感觉,不能把使用的流程清晰展示出来,下面是个简单的示例,力求把流程清楚展示,其他的可简则简。</p>
<p> </p>
<p>程序效果:用线程画一个蓝色的长方形。</p>
<pre name="code" class="java">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);//解锁画布,提交画好的图像
}
}
}
}</pre>
<p> </p>
</div>
<p>根据楼主的demo我也写了个小小的demo,可就是物体移动的时候比较慢,不知道是为什么?</p>
<pre name="code" class="java">package com.mcgk.paopao;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import com.mcgk.paopao.Paopao.MyView.MyThread;
import com.mcgk.util.BackgroundUtil;
public class Paopao extends Activity {
private MyThread mythread;
private static boolean drawFlag = false;
private static int x = 14;
private static int y = 20;
/** Called when the activity is first created. */
@Override
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
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Resources r = this.getContext().getResources();
BackgroundUtil.drawBackground(r, canvas);
BackgroundUtil.drawTree(r, canvas, x, y);
drawFlag = true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return mythread.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return mythread.onKeyUp(keyCode, event);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mythread = new MyThread(holder, this);
new Thread(mythread).start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
class MyThread implements Runnable {
private SurfaceHolder holder;
private MyView _panel;
public MyThread(SurfaceHolder holder, MyView panel) {
this.holder = holder;
this._panel = panel;
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
synchronized (holder) {
if (keyCode == KeyEvent.KEYCODE_DPAD_UP){
y = y - 30;
}else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
y = y + 30;
}else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
x = x - 30;
}else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
x = x + 30;
}
}
drawFlag = false;
return false;
}
@Override
public void run() {
Canvas c;
while (true) {
c = null;
if(drawFlag){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
continue;
}
try {
c = holder.lockCanvas(null);
synchronized (holder) {
_panel.onDraw(c);
}
} finally {
if (c != null) {
holder.unlockCanvasAndPost(c);
}
}
}
}
}
}
}</pre>
<div class="quote_div">
<p>SurfaceView在游戏开发中有着举足轻重的地位,它对于画面的控制有着更大的自由度(<a title="利用Handler来更新Android UI" href="/blog/411860" target="_blank">不像View要用handler来更新,关于View的</a>),但这方面的参考资料并不是太多,能找到的例子都有点喧宾夺主的感觉,不能把使用的流程清晰展示出来,下面是个简单的示例,力求把流程清楚展示,其他的可简则简。</p>
<p> </p>
<p>程序效果:用线程画一个蓝色的长方形。</p>
<pre name="code" class="java">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);//解锁画布,提交画好的图像
}
}
}
}</pre>
<p> </p>
</div>
<p>根据楼主的demo我也写了个小小的demo,可就是物体移动的时候比较慢,不知道是为什么?</p>
<pre name="code" class="java">package com.mcgk.paopao;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import com.mcgk.paopao.Paopao.MyView.MyThread;
import com.mcgk.util.BackgroundUtil;
public class Paopao extends Activity {
private MyThread mythread;
private static boolean drawFlag = false;
private static int x = 14;
private static int y = 20;
/** Called when the activity is first created. */
@Override
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
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Resources r = this.getContext().getResources();
BackgroundUtil.drawBackground(r, canvas);
BackgroundUtil.drawTree(r, canvas, x, y);
drawFlag = true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return mythread.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return mythread.onKeyUp(keyCode, event);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mythread = new MyThread(holder, this);
new Thread(mythread).start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
class MyThread implements Runnable {
private SurfaceHolder holder;
private MyView _panel;
public MyThread(SurfaceHolder holder, MyView panel) {
this.holder = holder;
this._panel = panel;
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
synchronized (holder) {
if (keyCode == KeyEvent.KEYCODE_DPAD_UP){
y = y - 30;
}else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
y = y + 30;
}else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
x = x - 30;
}else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
x = x + 30;
}
}
drawFlag = false;
return false;
}
@Override
public void run() {
Canvas c;
while (true) {
c = null;
if(drawFlag){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
continue;
}
try {
c = holder.lockCanvas(null);
synchronized (holder) {
_panel.onDraw(c);
}
} finally {
if (c != null) {
holder.unlockCanvasAndPost(c);
}
}
}
}
}
}
}</pre>
5 楼
christensen
2009-09-20
每次画2个方块
4 楼
raymondlueng
2009-09-18
ansili 写道
那如果我想在上次画的基础上接着画呢?。
也就是说我第一次在surfaceview 画了一个方块,再次接到用户的动作时在上次所画结果上接着在surfaceview 再画一个方块.此时surfaceview 上已经存在两个方块了。
surfaceview 能否胜任? 需要怎么做?
也就是说我第一次在surfaceview 画了一个方块,再次接到用户的动作时在上次所画结果上接着在surfaceview 再画一个方块.此时surfaceview 上已经存在两个方块了。
surfaceview 能否胜任? 需要怎么做?
如果要保留当前的接着画,SurfaceView是无法做到的!
3 楼
ansili
2009-09-18
那如果我想在上次画的基础上接着画呢?。
也就是说我第一次在surfaceview 画了一个方块,再次接到用户的动作时在上次所画结果上接着在surfaceview 再画一个方块.此时surfaceview 上已经存在两个方块了。
surfaceview 能否胜任? 需要怎么做?
也就是说我第一次在surfaceview 画了一个方块,再次接到用户的动作时在上次所画结果上接着在surfaceview 再画一个方块.此时surfaceview 上已经存在两个方块了。
surfaceview 能否胜任? 需要怎么做?
2 楼
raymondlueng
2009-09-18
ansili 写道
在用SurfaceView时遇到问题请指点.
每次把画当前正方形时,把上次的清除掉,现在显示很乱画图代码如下
每次把画当前正方形时,把上次的清除掉,现在显示很乱画图代码如下
public void selectSmallPicture(Point _origialPoint) { if(_origialPoint == null) { return ; } Canvas canvas = holder.lockCanvas();// 获取画布 int startX = _origialPoint.x * (PICTURE_EXTENT + CUBICLE) - 1; int startY = _origialPoint.y * (PICTURE_EXTENT + CUBICLE) - 1; //canvas.save(); Paint linePaint = new Paint(); linePaint.setColor(Color.RED); canvas.drawLine(startX, startY, startX , startY + PICTURE_EXTENT, linePaint); canvas.drawLine(startX, startY, startX + PICTURE_EXTENT, startY , linePaint); canvas.drawLine(startX+ PICTURE_EXTENT, startY, startX + PICTURE_EXTENT, startY + PICTURE_EXTENT, linePaint); canvas.drawLine(startX, startY + PICTURE_EXTENT, startX + PICTURE_EXTENT, startY + PICTURE_EXTENT, linePaint); if(tempPoint!=null) { startX = tempPoint.x * (PICTURE_EXTENT + CUBICLE) - 1; startY = tempPoint.y * (PICTURE_EXTENT + CUBICLE) - 1; linePaint.setColor(bgcolor); canvas.drawLine(startX, startY, startX , startY + PICTURE_EXTENT, linePaint); canvas.drawLine(startX, startY, startX + PICTURE_EXTENT, startY , linePaint); canvas.drawLine(startX+ PICTURE_EXTENT, startY, startX + PICTURE_EXTENT, startY + PICTURE_EXTENT, linePaint); canvas.drawLine(startX, startY + PICTURE_EXTENT, startX + PICTURE_EXTENT, startY + PICTURE_EXTENT, linePaint); } canvas.restore(); holder.unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像 tempPoint = _origialPoint; }
Android surfaceview 的画图机制是这样设计的,只能画一次背景,再画你想画的才可以!
1 楼
ansili
2009-09-18
在用SurfaceView时遇到问题请指点.
每次把画当前正方形时,把上次的清除掉,现在显示很乱画图代码如下
每次把画当前正方形时,把上次的清除掉,现在显示很乱画图代码如下
public void selectSmallPicture(Point _origialPoint) { if(_origialPoint == null) { return ; } Canvas canvas = holder.lockCanvas();// 获取画布 int startX = _origialPoint.x * (PICTURE_EXTENT + CUBICLE) - 1; int startY = _origialPoint.y * (PICTURE_EXTENT + CUBICLE) - 1; //canvas.save(); Paint linePaint = new Paint(); linePaint.setColor(Color.RED); canvas.drawLine(startX, startY, startX , startY + PICTURE_EXTENT, linePaint); canvas.drawLine(startX, startY, startX + PICTURE_EXTENT, startY , linePaint); canvas.drawLine(startX+ PICTURE_EXTENT, startY, startX + PICTURE_EXTENT, startY + PICTURE_EXTENT, linePaint); canvas.drawLine(startX, startY + PICTURE_EXTENT, startX + PICTURE_EXTENT, startY + PICTURE_EXTENT, linePaint); if(tempPoint!=null) { startX = tempPoint.x * (PICTURE_EXTENT + CUBICLE) - 1; startY = tempPoint.y * (PICTURE_EXTENT + CUBICLE) - 1; linePaint.setColor(bgcolor); canvas.drawLine(startX, startY, startX , startY + PICTURE_EXTENT, linePaint); canvas.drawLine(startX, startY, startX + PICTURE_EXTENT, startY , linePaint); canvas.drawLine(startX+ PICTURE_EXTENT, startY, startX + PICTURE_EXTENT, startY + PICTURE_EXTENT, linePaint); canvas.drawLine(startX, startY + PICTURE_EXTENT, startX + PICTURE_EXTENT, startY + PICTURE_EXTENT, linePaint); } canvas.restore(); holder.unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像 tempPoint = _origialPoint; }
发表评论
-
类似Chome的翻转效果
2012-09-18 23:14 2343简单的demo,屏幕上下滑动翻转View,类似Android ... -
3D编程基础数学之旋转及在Android中的应用
2012-02-10 00:11 0最近因为兴趣,看了一些3D编程的书,有种感觉就是写这些书的作者 ... -
Android中屏幕Density对BitmapDrawable的影响
2011-07-08 21:44 7839很早之前写的文章了,发在这里记录一下。 在之前的 ... -
Android程序与Javascript的交换
2010-04-16 21:40 0hello! -
Android Services使用示例
2010-01-12 16:50 14041Android开发中,当需要创建在后台运行的程序的时候,就要 ... -
Android游戏开发之服务器端
2010-01-09 16:38 6664首先我不知道这篇文章发到Android开发板块是否适合的,因为 ... -
Android ListView常用用法
2009-12-03 20:56 36591ListView是比较常用的控件,但一直都觉得创建ListVi ... -
Android View添加 Listener 小技巧示例
2009-12-02 15:35 9786在开发中为控件添加Listener是非常常见的工作,最简单的添 ... -
Android Gesture 手势识别使用实例
2009-10-20 11:56 10147很高兴能在Android1.6的sdk看到手势识别这一 ... -
Android第二个游戏 DragonFeed(勇者喂恶龙)
2009-10-12 17:57 7957这是参加学校一个小比赛的参赛游戏,之前一直在忙 认证考试和项目 ... -
Android 震动示例--心跳效果
2009-10-02 23:58 7670正在开发第二个游戏,计时就要结束的时候,为了营造紧张的气氛, ... -
Android adb的使用略解
2009-09-30 16:08 40217安卓网的一个帖子,写得不错,记下来 ADB全称Android ... -
Android游戏开发之连连看算法
2009-09-29 00:36 10342因为有朋友在站内信中问到连连看的具体算法,所以我就把算法pos ... -
android游戏开发之选关画面
2009-09-21 15:44 3973在游戏开发中,往往要提供选关的页面,选择关卡可以简单地使用li ... -
Android重力感应Demo
2009-09-11 23:33 13982android中的很多游戏的游戏都使用了重力感应的技术,但其a ... -
Android游戏开发之爆炸效果
2009-09-02 00:29 18343在做Android游戏MagicBubble开发的时候 ... -
Android 的第一个游戏
2009-08-18 08:48 7864学了android1个多月,做了一款连连看游戏,上了andro ... -
Android canvas的save()和restore()用法
2009-08-05 12:21 19829在读Android SDK里面的samples里面游戏的时候, ... -
Android 2d物理引擎Box2d的使用示例
2009-08-04 09:06 14195Box2d是一个很出名的2d物理引擎,大家可以google之。 ... -
利用Handler更新Android UI的另一种方法
2009-07-29 11:28 11840文字程序很简单,一个View,一个Activity,利用han ...
相关推荐
android之surfaceview学习示例
android中的surfaceview示例源码下载,Android SurfaceView在游戏开发中使用想当广泛,SurfaceView对于画面的控制有着更大的自由度,它不像View那样要用handler来更新,但是网上关于 SurfaceView使用这方面的参考...
android使用双缓冲辨析及surfaceview使用例子
android之view和surfaceview用法示例汇总
NULL 博文链接:https://byandby.iteye.com/blog/824535
基于android的SurfaceView实现人物动画的一个简单示例程序。
主要介绍了Android中SurfaceView用法,以一个简单的图形绘制及改变位置实现方法分析了SurfaceView的使用技巧,需要的朋友可以参考下
该资源是一个完整的android项目,主要是利用surfaceview和android的重力传感器实现自由落体的模拟,包括碰撞和瞬间改变重力加速度的方向等。该案例是我模拟物理引擎的一个例子,主要是参照“动量守恒定律”和“动能...
Activity加载自定义的SurfaceView-> SurfaceView 构造器中启动线程A,循环改变SurfaceView的x,y坐标,当x,y坐标到某点时设渐显标志位picAlphaFlag为true -> Surface创建时即surfaceCreated中,启动线程B,循环根据...
android surfaceview使用例子
android surfaceview例程,一个安卓平台上使用surfaceview组件的小例子。
主要为大家详细介绍了Android双重SurfaceView实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
surfaceView用法的简单例子。帮助初学者理解surfaceview的使用方式。
本文主要介绍Android SurfaceView自定义方法,这里对SurfaceView的基础知识做了详解,并附简单的示例代码,以便参考,有需要的小伙伴可以参考下
主要为大家详细介绍了android使用surfaceview+MediaPlayer播放视频,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在这个例子中,我用代码制作了一个拍摄界面,里面只有三个控件,一个是自己封装的CameraView,它继承了SurfaceView,一个是悬浮在CameraView上的按 钮,点击它可以捕捉画面并把图像存储到sdCard的根目录下,还有一个...
代码示例 // 设置硬件加速 myView.setLayerType(View.LAYER_TYPE_HARDWARE, null); // 设置动画 ObjectAnimator animator = ObjectAnimator.ofFloat(myView, View.TRANSLATION_X, 150); // 设置一个回调,在动画...
本文主要介绍Android SurfaceView运行机制,这里整理了详细的资料来讲解SurfaceView的运行原理,并附示例代码参考,有需要的小伙伴可以参考下
主要介绍了Android编程之SurfaceView学习示例,结合实例分析了SurfaceView的功能、使用方法与注意事项,具有一定参考借鉴价值,需要的朋友可以参考下