将ImageView的背景与Drawable进行比较

时间:2015-07-17 08:50:56

标签: android imageview compare

我有16个空白方块,我想每1秒随机显示一个红色方块,所以我使用了处理程序,这是有效的。 但是,当用户点击此红色方块时,分数会增加1。 我试图添加onclicklistener来命名,但这不是我需要的,因为一旦正方形背景为红色,得分增加1即使它返回白色所以我试图添加点击监听器到每个imageView从第一个开始但没有任何反应;当我点击它时应用程序崩溃所以我该怎么办?## Heading ##

代码:

Drawable RedSquare;

ImageView Image1;
TextView res;
Random random = new Random();
int score = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    MediaPlayer mp  =MediaPlayer.create(getApplicationContext(),R.raw.mp);
    mp.start();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reflex);
    RedSquare = getResources().getDrawable(R.mipmap.redsquare);
    Image1 = (ImageView) findViewById(R.id.imageView1);
    ImageView Image2 = (ImageView) findViewById(R.id.imageView2);
    ImageView Image3 = (ImageView) findViewById(R.id.imageView3);
    ImageView Image4 = (ImageView) findViewById(R.id.imageView4);
    ImageView Image5 = (ImageView) findViewById(R.id.imageView5);
    ImageView Image6 = (ImageView) findViewById(R.id.imageView6);
    ImageView Image7 = (ImageView) findViewById(R.id.imageView7);
    ImageView Image8 = (ImageView) findViewById(R.id.imageView8);
    ImageView Image9 = (ImageView) findViewById(R.id.imageView9);
    ImageView Image10 = (ImageView) findViewById(R.id.imageView10);
    ImageView Image11 = (ImageView) findViewById(R.id.imageView11);
    ImageView Image12 = (ImageView) findViewById(R.id.imageView12);
    ImageView Image13 = (ImageView) findViewById(R.id.imageView13);
    ImageView Image14 = (ImageView) findViewById(R.id.imageView14);
    ImageView Image15 = (ImageView) findViewById(R.id.imageView15);
    ImageView Image16 = (ImageView) findViewById(R.id.imageView16);
    res = (TextView) findViewById(R.id.reflexresult);
    final ImageView[] Image = {Image1, Image2, Image3, Image4, Image5, Image6,
            Image7, Image8, Image9, Image10, Image11, Image12, Image13, Image14, Image15, Image16};


    final Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            GeneratePosition(Image);
            handler.postDelayed(this, 1000);
        }
    };
    handler.postDelayed(runnable, 1000);
    addScore();
}

public void GeneratePosition(ImageView[] Image) {

    int index = random.nextInt(Image.length);
    ImageView name = Image[index];
    for (ImageView imageView : Image) {
        imageView.setImageDrawable(getResources().getDrawable(R.mipmap.blanksquare));
    }

    name.setImageDrawable(getResources().getDrawable(R.mipmap.redsquare));
}
public void addScore(){
    Image1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(Image1.getBackground().equals(RedSquare)){
                score++;
                res.setText(score+"");
            }
        }
    });
}

}

2 个答案:

答案 0 :(得分:0)

为什么要比较背景?只需将当前显示红色背景的ImageView的引用保存为int main(void)方法中的字段。

在on click侦听器中,您将获得所单击视图的引用。您所要做的就是将其与之前保存的参考值进行比较。

答案 1 :(得分:0)

以下是我将如何保存此问题的示例实现。它为应该单击的视图添加了一个侦听器。如果用户长时间点击突出显示的ImageView,它将突出显示一个新的。如果用户及时点击突出显示的ImageView,则点会更新,并立即突出显示下一个ImageView。

private static final int TIMEOUT_IN_MILLIS = 1000;
private static final int POINTS_PER_CORRECT_CLICK = 1;

private static final Handler HANDLER = new Handler();
private static final Random RANDOM = new Random();

private final Runnable startRoundOnTimeoutRunnable = new StartRoundOnTimeoutRunnable();
private final View.OnClickListener correctImageViewClickListener = new CorrectImageViewClickListener();

private final List<ImageView> availableImageViews;
private final TextView scoreDisplay;

private final Drawable blackSquare;
private final Drawable redSquare;

private int score = 0;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // initialization of all views
    // and
    // assembling of  availableImageViews list

    startNewRound();
}

public void startNewRound() {
    resetAllImageViews();
    initializeNextImageViewToClick();
    startTimeout();
}

private void initializeNextImageViewToClick() {
    ImageView imageViewToClick = getRandomImageView();
    imageViewToClick.setBackground(redSquare);
    imageViewToClick.setOnClickListener(correctImageViewClickListener);
}

private void resetAllImageViews() {
    for (ImageView imageView : availableImageViews) {
        imageView.setImageDrawable(blackSquare);
        imageView.setOnClickListener(null);
    }
}

private ImageView getRandomImageView() {
    int index = RANDOM.nextInt(availableImageViews.size());
    return availableImageViews.get(index);
}

private void incrementAndDisplayScore() {
    score += POINTS_PER_CORRECT_CLICK;
    scoreDisplay.setText("Score: " + score);
}

private void startTimeout() {
    HANDLER.postDelayed(startRoundOnTimeoutRunnable, TIMEOUT_IN_MILLIS);
}

private void cancelTimeout() {
    HANDLER.removeCallbacks(startRoundOnTimeoutRunnable);
}


private class CorrectImageViewClickListener implements View.OnClickListener {

    @Override
    public void onClick(View view) {
        cancelTimeout();
        incrementAndDisplayScore();
        startNewRound();
    }

}

private class StartRoundOnTimeoutRunnable implements Runnable {

    @Override
    public void run() {
        startNewRound();
    }

}
相关问题