首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bitmap.getPixel in SurfaceView

Bitmap.getPixel in SurfaceView
EN

Stack Overflow用户
提问于 2015-08-17 16:59:31
回答 1查看 1.2K关注 0票数 0

我有这样的代码,其中有一个背景,在一个手,都是位图图像。现在,如果单击是否触及到手,我必须使用onClick方法进行控制。为此,我在这里写了一些人告诉我使用一种叫做"bitmap.getPixel(int x, int y)“的方法,它给出了像素的颜色。为了控制,如果点击没有触摸到手,我写"bitmap.getPixel(x, y) != Color.TRASPARENT",但不能完美地工作。在此下面我编写了SurfaceView的代码。“

位图“手”是一张中央一只手的图片,周围有部分。

代码语言:javascript
复制
public class GamePanel extends SurfaceView implements SurfaceHolder.Callback{

private long missileStartTime;
private ThreadLv1 thread;
private OggettiLv1 hand;
private int conto=0;
private Sfondo sfondo;
MediaPlayer ouch;


public GamePanel(Context context){
    super(context);
    getHolder().addCallback(this);
    thread = new ThreadLv1(getHolder(), this);
    setFocusable(true);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){}

@Override
public void surfaceDestroyed(SurfaceHolder holder){
    boolean retry = true;
    while(retry)
    {
        try{thread.setRunning(false);
            thread.join();

        }catch(InterruptedException e){e.printStackTrace();}
        retry = false;
    }
}


@Override
public void surfaceCreated(SurfaceHolder holder){
    hand = new OggettiLv1(BitmapFactory.decodeResource(getResources(), R.drawable.mano5));
    sfondo = new Sfondo(BitmapFactory.decodeResource(getResources(), R.drawable.sfondo));
    ouch= MediaPlayer.create(getContext(), R.raw.ouch);
    knifesong.start();
    thread.setRunning(true);
    thread.start();
}


public void update() {
}

@Override
public void draw(Canvas canvas)
{
    if(canvas!=null) {
        final int savedState = canvas.save();
        background.draw(canvas);
        hand.draw(canvas);

        drawText(canvas);
        canvas.restoreToCount(savedState);
    }
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    float x = event.getX();
    float y = event.getY();
    switch(event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
            int c = hand.sprite.getPixel((int) event.getX(), (int) event.getY());
            if(c!=Color.TRANSPARENT){
                conto++;
            }
            return true;
    }
    return false;
}

}

有人知道这个代码中的问题和解决方案吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-08-17 17:12:31

我认为这可能是问题所在:

代码语言:javascript
复制
int c = hand.sprite.getPixel((int) event.getX(), (int) event.getY());

我认为你在雪碧上的x,y位置得到一个像素的值,你应该得到画布上像素的值。

编辑:

由于画布是静态的,我建议执行以下操作:向类添加一个位图

代码语言:javascript
复制
private Bitmap canvasState;

在“绘制”函数中,首先初始化canvasState

代码语言:javascript
复制
canvasState = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.RGB_565));
canvas.setBitmap(canvasState);

在此之后,对画布所做的每一个更改都将对canvasState进行,您可以在事件处理程序中使用它,如下所示:

代码语言:javascript
复制
int c = canvasState.getPixel((int) event.getX(), (int) event.getY());

我不确定我编写的代码是否会编译(我是从头上写的),但我认为您可以自己解决编译错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32055897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档