相关疑难解决方法(0)

Android,绘制位图到画布的最快方法

只是想知道将位图绘制到画布的最快方法是什么?

目前我有一个位图(和绘图画布),我用它来缓冲绘图调用,然后当我绘制到画布时通过应用1px画布翻译有滚动效果.仅此一项就可以将帧速率从60+ FPS降低到~40,非常受欢迎.我现在不使用surfaceView(或GLSurfaceView),但只是想知道我是否遗漏任何会提高速度的东西.onDraw()代码如下

@Override
    public void onDraw(Canvas canvas)
    {
        //update fps text
        mFpsTracker.frameTouch();

        if(mBufferedBitmap == null)
        {
            mBufferedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444);
            mBufferedCanvas = new Canvas(mBufferedBitmap);
        }

        paint.setColor(Color.BLUE);
        mBufferedCanvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint);
        mBufferedCanvas.translate(0, -1);


    canvas.drawBitmap(mBufferedBitmap, 0, 0, null); 

    //draw fps
    mTextPaint.setColor(Color.WHITE);
    canvas.drawText(mFpsTracker.getFPSString(), 40, 40, mTextPaint);


    invalidate();       
}
Run Code Online (Sandbox Code Playgroud)

graphics android canvas bitmap

13
推荐指数
2
解决办法
3万
查看次数

应用关闭并重新打开时Android崩溃

我有一个非常简单的Android应用程序,只显示一个空白的白色屏幕.当我按下HOME按钮关闭应用程序,然后尝试再次打开应用程序,它崩溃,我得到"强制关闭"按钮.在Eclipse中我收到此错误,"ActivityManager:警告:活动未启动,因为正在为用户保留当前活动." 我该如何修复此崩溃?

public class HelloAndroid extends 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(new Panel(this));
}

class Panel extends SurfaceView implements SurfaceHolder.Callback {

    private TutorialThread _thread;

    public Panel(Context context) {
        super(context);

        // register our interest in hearing about changes to our surface
        SurfaceHolder holder = getHolder();
        holder.addCallback(this);
        _thread = new TutorialThread(holder, this);

        setFocusable(true);
    }

    @Override
    public void onDraw(Canvas canvas) {

        // Clear the background
        canvas.drawColor(Color.WHITE);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int …
Run Code Online (Sandbox Code Playgroud)

crash android

11
推荐指数
1
解决办法
3万
查看次数

动态壁纸水波纹效果

我正在制作一个动态壁纸,它在触摸屏幕时融入了一些水波纹效果,但我有点卡住了.

创建多个图像并循环创建一个波纹动画会不会更好?或者在将它放在画布上之前将位图扭曲一下会更好吗?

是一个通过OpenGL完成的非常好的连锁效果的视频.

我对OpenGL还没有任何经验,并且想知道是否仍然可以在动态壁纸上创建2D水效果?

android effects wallpaper live

9
推荐指数
2
解决办法
2万
查看次数

Android Surfaceview线程和内存泄漏

我在Android中创建游戏,我注意到游戏有内存泄漏.我设法将内存泄漏隔离到一个较小的应用程序,以便我可以看到很好的尝试和解决,如何解决它.

该应用程序使用一个surfaceview作为其视图,并附加一个线程,以便完成所有绘图到屏幕.当我开始一个新活动并关闭我当前正在使用的活动时,会发生内存泄漏.当我在我的测试应用程序上执行内存转储时,我可以看到这一点,因为它只是打开并关闭一个活动(活动a - >活动b - >活动a).我有点想法如何解决这个问题,因为我试图将我创建的所有引用归零(在线程内),iv尝试在我销毁视图时从surfaceview中删除回调,并且在活动中,它似乎没有任何区别.

MemoryLeakActivity.java

package memory.leak;

import memory.leak.view.MemoryLeak;
import android.app.Activity;
import android.os.Bundle;

public class MemoryLeakActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MemoryLeak(this));
    }
}
Run Code Online (Sandbox Code Playgroud)

MemoryLeakViewThread.java

package memory.leak.thread;

import memory.leak.view.MemoryLeak;
import android.view.SurfaceHolder;
import android.graphics.Canvas;


public class MemoryLeakViewThread extends Thread {
    private MemoryLeak view;
    private boolean run =false;

    public MemoryLeakViewThread(MemoryLeak view) {
        this.view =view;
    }

    public void setRunning(boolean run) {
        this.run =run;
    }

    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

multithreading android memory-leaks surfaceview

8
推荐指数
1
解决办法
4769
查看次数

Galaxy Nexus动画速度慢

我编辑了这段代码,将Rect实例移出onDraw方法.我在几台设备上测试过它.

public class BallBouncesActivity extends Activity {
    BallBounces ball;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ball = new BallBounces(this);
        setContentView(ball);
    }
}


class BallBounces extends SurfaceView implements SurfaceHolder.Callback {
    GameThread thread;
    int screenW; //Device's screen width.
    int screenH; //Devices's screen height.
    int ballX; //Ball x position.
    int ballY; //Ball y position.
    int initialY ;
    float dY; //Ball vertical speed.
    int ballW;
    int ballH;
    int bgrW;
    int bgrH;
    int angle;
    int bgrScroll;
    int dBgrY; //Background scroll speed.
    float …
Run Code Online (Sandbox Code Playgroud)

android android-4.0-ice-cream-sandwich

7
推荐指数
1
解决办法
1203
查看次数

SurfaceHolder.lockCanvas()返回null

我正在制作一款游戏,因为我是Android新手,所以我的设计基于示例LunarLander代码.在它的设计中,GameThread.doStart()调用from GameActivity,然后线程从其GameThread.run()循环运行所有内容,如下所示(为清楚起见,大部分代码已被删除):

public class GameActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        gameView = new GameView(this);
        fl = new FrameLayout(this);
        fl.addView(gameView);

        setContentView(fl);

        gameThread = gameView.getThread();
        gameThread.doStart();
    }
}
Run Code Online (Sandbox Code Playgroud)

.

class GameThread extends Thread
{
    public void doStart()
    {
    }

    public void run()
    {
        while (running)
        {
            Canvas c = null;
            try
            {
                c = mSurfaceHolder.lockCanvas();
                // Use canvas
            }
            finally
            {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了解决我遇到的一些问题,我试图将更多控制权交给GameActivity,如下所示:

public class GameActivity extends Activity
{ …
Run Code Online (Sandbox Code Playgroud)

android surfaceholder

5
推荐指数
1
解决办法
2万
查看次数

Canvas不会更新(invalidate)直到整个while循环结束

我正试图在画布上移动一个球.a和b类似于x,y坐标位置.从我的代码中试图动态获取不同值的任何方式.a,b是全局变量.但似乎"invalidate()"或屏幕刷新仅在整个循环结束时发生.你知道为什么吗?.如果我必须在另一个线程上构建它,请建议我一些简单的代码.

private void shootBall(){
    while (a>b){
        a = getPositionX();
        b = getPositionY();
        invalidate();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android

3
推荐指数
1
解决办法
7527
查看次数

为什么SurfaceView的游戏循环无法运行体面的FPS?

我拼凑了一个简单的游戏循环,主要是使用看起来很普遍的技术,特别是在Java的杀手游戏编程书中,在本教程中我刚刚发现:这里 只是一个带有后台缓冲区的简单,定时的游戏循环.

问题是它不会以良好的FPS重绘屏幕.我能从摩托罗拉Xoom中获得的最好成绩是15FPS,目标是24.

如果我的后置缓冲区大小的一半,速度会大幅提升,所以我猜这个问题可能与利用Xoom上的屏幕有关(我的SurfaceView的大小是1280x727)...还有其他游戏看到了以相同的尺寸完美地运行.

我没有任何其他设备可以测试,所以我现在有点卡住了该做什么.

我做错了什么/失踪/无知?

android frame-rate surfaceview game-loop

3
推荐指数
1
解决办法
3112
查看次数

在Andengine的动画背景

我正在通过android andengine开发游戏.我想为菜单场景创建动画背景.我怎么能这样做?

android animated andengine

2
推荐指数
1
解决办法
2342
查看次数