android一个接一个地突出显示一个位图数组

时间:2014-10-27 02:37:20

标签: android android-bitmap

嗨:)我在表面视图中绘制了六个圆形图像。就像这样..

public class GameBoard extends SurfaceView implements Surface.Callback {

CircleObject circles[];

public GameBoard(Context c){
    super(c);
    circles = new CircleObject[6];

    for(int i = 0; i < circle.length; i++){
        circles[i] = new CircleObject(someX, someY, someWidth, someHeight);
    }
}

public void surfaceCreated(SurfaceHolder){
    // i start the GameLoop here . . 
    gameLoop.start();
}

public void onDraw(Canvas c){
    super.onDraw(c);
    gameDraw(c);
}   

public void gameDraw(Canvas c){
    // draw six circles from left to right
    for(int i = 0; i < 6; i++){
       circles[i].draw(c);
    }
}

public boolean onTouch(TouchEvent event){
    for(int i = 0; i < circles.length; i++){
        if(circles[i].onTouch(event)){
            circles[i].highlight();

            return true;
        }
    }

    return false;
}

}“

我的Circle对象..

public class CircleObject{
    public CircleObject(int x, int y, int w, int h, Bitmap bmp){
        // initialize local variables here from constructors params . . 
        // set width and height of bmp here
    }

    public void setBitmap(Bitmap b){
        myBmp = b;
    }

    public boolean onTouch(TOuchEvent event){
        // check if event.x and event.y is within 
        // this circle then return true...,
        // false if not.
    }

    public void draw(Canvas c){
        if(isHighlight){
            highlightDuration--;
            if(highlightDuration == 0){
                 // set bit map to originalbitmap
                 setBitmap(originalBitmap);
                 isHighlight = false;
                 highlightDuration = 10;
            }
        }

        c.drawBitmap(myBmp, my_X, my_Y, null);
    }

    public void highlight(){
        // store my myBmp so i can set it back from being highlighted
        originalBmp = myBmp;

        ishighlight = true;

        // highlight bitmap
        setBitmap(highlightBitmap);
    }
}

我的Gameloop ..(运行10 fps)

public class GameLoop extends Thread{
    long tickPS = 1000/10;
    public void run(){
        while(running){
            Canvas c = null;

            c = surfaceHolder.lockCanvas();

            synchronized(surfaceHolder){
                 gameBoard.onDraw(c);
            }

            surfaceHolder.unlockCanvasAndPost(c);

            sleepTime = tickPS - (System.currentTimeMillis() - startTime);

            try {
                if (sleepTime > 0) {
                   Thread.sleep(sleepTime);
            } else {
                 Thread.sleep(10);
            }           
        }
    }
}

屏幕上会有六个圆圈,当我触摸其中一个圆圈时,圆圈会突出显示一个圆圈 短时间内将返回其原始的Bmp(未突出显示)。到目前为止工作:)。

现在我想要实现的是,当我触摸第一个圆圈时,我想要一个接一个地突出显示所有这些圆圈。我的意思是,在第一个圆圈完成突出显示后,第二个圆圈将突出显示那么第三个,第四个,等等...就像一个补间动画, 到目前为止,我的计划是为每个圆圈创建单独的线程..我没有尝试过,因为我正在考虑'关于我的gameLoop为我处理每帧的绘图..,hmhmhm。 。

任何建议家伙..? 抱歉这篇长篇文章...

1 个答案:

答案 0 :(得分:0)

为什么需要多线程?您可以为每个圆圈设置highlightDuration,为跟踪lastCircleHightlighted设置变量。假设您触摸第4个圆圈,lastCircleHighlighted = 3,继续减少highlightDuration3。当持续时间为0时,恢复它并将lastCircleHighlighted设置为下一个(= 4),依此类推。如果在任何给定时间只能突出显示一个圆圈,则甚至不需要创建多个highlightDuration。