Tag: surfaceview

将ImageView实现为SurfaceView

我有一个小问题…… 是否可以在SurfaceView实现ImageView ,或在SurfaceView创建ImageView 如果是这样,有人会指出我正确的方向如何做到这一点。

SurfaceView显示为空,没有任何渲染

我试图从一个线程中将一些形状绘制到SurfaceView上,但没有任何东西被渲染到屏幕上。 我有同样问题的人看过类似的问题,但没有一个答案让我找到了解决方案,在我的具体案例中提出了不同的原因。 我已经创建了一个简化版本的代码来演示这个问题。 渲染由RenderingTestView类处理,该类实现从SurfaceView派生的自定义视图。 渲染线程在RenderingTestView中实现为Runnable: package com.example.renderingtest.app; import android.content.Context; import android.graphics.*; import android.os.Build; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; public class RenderingTestView extends SurfaceView { private SurfaceHolder holder; private Paint paint; private boolean surfaceCreated = false; private Thread videoThread; public RenderingTestView(Context context) { super(context); init_view(context); } public RenderingTestView(Context context, AttributeSet attrs) { super(context, attrs); init_view(context); […]

设置位图的旋转和位置

我想知道我如何改变位图的位置,同时旋转它。 我画在canvas上。 我目前正在使用这行代码: canvas.drawBitmap(bitmap, posX, posY, paint); 我认为使用矩阵进行轮换是最好的选择吗? 问题是上面发布的代码行不是一个矩阵而是一个位置。 还有一个类似的代码行: canvas.drawBitmap(bitmap, matrix, paint); 这个采用矩阵而不是位置。 我该怎么做?

在SurfaceView上缩放位图=没有抗锯齿?

我试图在我的SurfaceViewcanvas上缩放DOWN高分辨率.png位图,如下所示: Bitmap player = BitmapFactory.decodeResource(getResources(), R.drawable.player); Paint paint; paint.setAntiAlias(true); paint.setDither(true); paint.setFilterBitmap(true); paint.setFlags(Paint.ANTI_ALIAS_FLAG); //then in onDraw: canvas.drawBitmap(player, null, frame, paint); 问题是当我使用View时抗锯齿效果很好,但是当我使用SurfaceView时它无法工作,质量看起来很糟糕。 我已经尝试了一切。 有些人甚至在3年前在各个网站上发布了这个问题(即使在这里)并且没有解决方案。 有没有人有任何想法? 以下是该人发布的原始问题: 在SurfaceView上绘制缩放位图 – 无抗锯齿

通过surfaceview使用zxing条形码阅读器

我正在创建一个条码扫描器应用程序,我想使用Zxing读取条形码,我的应用程序有一个surfaceview并显示相机,但现在我想从我的SurfaceView相机扫描条形码,我使用它的原因,是我在我的布局中的表面视图下有两个Edittexts来显示条形码的内容。 我应该如何创建一个类似的应用程序,主要的问题是如何将zxing设置为表面。 如果有任何我会欣赏的方式。 布局截图:

Android:使用SurfaceView重新获得焦点

我现在正在掌握Android,玩弄Lunar Lander样本。 我发现如果您离开应用程序(例如,点击通话按钮),它将破坏底层表面(调用surfaceDestroyed )。 向后导航(将触发onWindowVisibilityChanged )应用程序将崩溃,因为它将尝试绘制到曲面而不重新创建它。 是否有一些代码可以放在onWindowVisibilityChanged (或其他任何地方)上,这些代码将重新生成SurfaceView的底层表面并很好地恢复执行? 感觉这应该是一个简单的函数调用,但我在API文档中找不到任何东西。 谢谢!

使用Android中的SurfaceView和Thread正确暂停onPause()和onResume()线程

要运行我在Android上创建的游戏,我一直在使用GamePanel包含方法onDraw()和onTouch()。 我也一直在使用一个GameThread类,它反复调用onDraw()和update()。 我的活动实例化了GamePanel,我的GamePanel实例化了GameThread。 我的onPause()只是将线程内的while循环中的条件设置为false。 我的onResume()过去只是设置为等于true,但是每次我尝试恢复应用程序时都会给我一个强制关闭错误( 参见编辑#1 )。 所以反而修复问题我只是重新实例化了线程, thread = new GameThread(getHolder(), this); 这解决了问题的一部分,允许我最小化应用程序,然后重新打开它没有问题。 但是,当我在应用程序中并锁定手机然后将其解锁(打开和关闭屏幕)时,线程永远不会启动。 这只是我的游戏处于冻结状态。 我知道我对这个问题的解决方案非常时髦,我很想学习一种更加接受和干净的方法来完成这一切。 这是代码(我遗漏了一些似乎不相关的行): GameActivity: void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gamePanel = new MainGamePanel(this); setContentView(gamePanel); } protected void onPause() { super.onPause(); gamePanel.shutDown(); } protected void onResume() { super.onResume(); gamePanel.startUp(); } 的GamePanel public MainGamePanel(Context context) { super(context); getHolder().addCallback(this); //adding the callback (this) […]

如果没有触摸事件发生,Android SurfaceView会变慢

我正在制作一个游戏,除了游戏循环外,一切都很顺利。 我正在使用SurfaceView并绘制2D Sprites(位图)。 目前游戏是一艘穿越小行星场的船。 船停留在屏幕的中心,手机向任一方向倾斜以移动小行星(小行星改变位置而不是玩家)。 新的小行星产生的旧小行星从屏幕上掉下来,形成无限的小行星场感。 在我的Nexus 5上运行时,我注意到大约3秒后,尽管我的游戏循环设置为60fps,但小行星在屏幕上移动变得不稳定。 这是代码: @Override public void run() { Canvas canvas; long startTime; long timeTaken; long sleepTime; while (running) { canvas = null; //Update and Draw try { startTime = System.nanoTime(); canvas = gameView.getHolder().lockCanvas(); //Update gameModel.update(gameController.getPlayerShots(), gameController.getCurrentTilt()); //Game Over? if (gameModel.isGameOver()) { running = false; } //Draw synchronized (gameView.getHolder()) { […]

在android中使用surfaceview在app中使用相机

我正在创建一个应用程序,我可以在其中使用相机,而无需使用手机的默认应用程序。所以我使用了表面视图并尝试将其保存到手机上,但onPictureTaken永远不会被调用。完整的代码是如下所示: package com.example.surfaceviewcamera; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.hardware.Camera; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; import android.view.Menu; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity implements SurfaceHolder.Callback { SurfaceView mSurfaceView; SurfaceHolder mSurfaceHolder; Camera mCamera; boolean mPreviewRunning; Button btncapture; […]

在Android中绘制到SurfaceView

我正在尝试将一些非常简单的绘图绘制到SurfaceView但我无法使其工作。 没有例外,但我也没有看到任何结果。 更准确地说,我正在尝试创建一个SurfaceView并用单一颜色填充它。 这是我的代码: public class SvetlinSurfaceViewTestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SurfaceRenderer renderer = new SurfaceRenderer(this); setContentView(renderer); } } class SurfaceRenderer extends ViewGroup implements SurfaceHolder.Callback { private final String TAG = “Svetlin Surface Renderer”; SurfaceView mSurfaceView; SurfaceHolder mHolder; public SurfaceRenderer(Context […]