0

画面に一連の画像を表示するアプリを作成しようとしています。ユーザーが画像をクリックしてから電話を振ると、クリックした画像を除いて、ビューのすべての画像が画面から消えます。これは私が今まで書いたものです:

// List of the Images for the app
private ImageView image1, image2;
private ImageView image3, image4;
private ImageView image5, image6;
private ImageView image7, image8;
private ImageView image9, image10;
private ImageView image11, image12;

private ImageView selectedImage;
private boolean flag = true;

// an array that will hold all the images.
private ImageView cards[] = new ImageView[12];

//SET THE IMAGES...


// onShake
mSensorListener
        .setOnShakeListener(new ShakeEventListener.OnShakeListener() {
                public void onShake() {
                if (selectedImage != null) {
                    showSelectedImageOnly();
                }
            }
        });

private void showSelectedImageOnly() {
    if(!flag)
        return;

    for (ImageView image : cards){
        if(image.getId() != selectedImage.getId()){
            image.setVisibility(View.INVISIBLE);
            Log.d("--MY-APP", "image number "+image.getId()+" was deleted");
        }
    }
    flag = false;
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.ImageView01:
        selectedImage = null;
        selectedImage = image1;
        rotateImage(0, image1, image2);
        defineTrickCard(0);
        break;
    case R.id.ImageView02:
        selectedImage = image1;
        rotateImage(0, image1, image2);
        defineTrickCard(0);
        break;
    case R.id.ImageView03:
    // .... THIS GOES ON...
    case R.id.ImageView12:
        selectedImage = image11;
        rotateImage(5, image11, image12);
        defineTrickCard(5);
        break;
    }
}

private void rotateImage(int index, ImageView firstImage,
        ImageView secondImage) {
    if (isImages[index]) {
        applyRotation(0, 90, firstImage, secondImage, isImages[index]);
        isImages[index] = !isImages[index];

    } else {
        applyRotation(0, -90, firstImage, secondImage, isImages[index]);
        isImages[index] = !isImages[index];
    }
}

private void applyRotation(float start, float end, ImageView firstImage,
        ImageView secondImage, boolean isFirst) {
    // Find the center of image
    final float centerX = firstImage.getWidth() / 2.0f;
    final float centerY = firstImage.getHeight() / 2.0f;

    // Create a new 3D rotation with the supplied parameter
    // The animation listener is used to trigger the next animation
    final Flip3dAnimation rotation = new Flip3dAnimation(start, end,
            centerX, centerY);
    rotation.setDuration(500);
    rotation.setFillAfter(true);
    rotation.setInterpolator(new AccelerateInterpolator());
    rotation.setAnimationListener(new DisplayNextView(isFirst, firstImage,
            secondImage));

    if (isFirst) {
        firstImage.startAnimation(rotation);
    } else {
        secondImage.startAnimation(rotation);
    }

}

問題は、ユーザーが複数の画像をクリックしてから電話が揺れると、クリックされたすべての画像が表示されたままになり、残りが必要に応じて消えることです。

これを修正する方法について何か考えはありますか?画面から非選択 (以前の選択を含む) をすべて非表示にする必要があります。

アップデート:

関数を表示するようにコードを更新しましrotateImageた。3D アニメーションの残りのコードは、この非常に優れたチュートリアルから取得されました。

4

1 に答える 1

0

Animationメソッドで画像を回転させるために使用していると思いますrotateImage。アニメーションの場合の注意点は、Viewオブジェクトがアニメーション中に変更されないことです。したがって、ビューを非表示に設定する必要がある場合は、onAnimationEndイベントに登録して を呼び出す必要がありますview.setVisibility(View.INVISIBLE)

于 2012-05-31T06:40:16.387 に答える