2

最初の質問は、既に選択した画像にマーカーを追加するために、インターネットの MarkableImageView クラスからダウンロードしたことです。クラスは次のとおりです。

public class MarkableImageView extends ImageView {
// Por defecto falso
private boolean checked = false;

public MarkableImageView(Context context) {
    super(context);
}

public MarkableImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MarkableImageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

public void setChecked(boolean checked) {
    this.checked = checked;
    invalidate();
}

public boolean isChecked() {
    return checked;
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if(checked) {
        Bitmap check = BitmapFactory.decodeResource(
                getResources(), R.drawable.checkbox_on_background);
        int width = check.getWidth();
        int height = check.getHeight();
        //int margin = 15;
        int marginWidth = (int)(canvas.getWidth()/15);
        int marginHeight = (int)(canvas.getHeight()/20);
        int x = canvas.getWidth() - width - marginWidth;
        //int y = canvas.getHeight() - height - margin;
        int y = marginHeight;
        canvas.drawBitmap(check, canvas.getWidth()-check.getWidth(), 1, new Paint());
    }
}
}

Gridview を使用してすべての写真を表示し、いくつかの写真にマークを付けたいと考えています。BaseAdapter を使用してデータをロードします。これが私のメソッド getView () です。

public View getView(int position, View convertView, ViewGroup parent) {
    MarkableImageView imageView;
    if(convertView == null) {
        imageView = new MarkableImageView(mContext);

        imageView.setLayoutParams(new GridView.LayoutParams((int)(Preferencias.anchoPantalla/3.5), (int)(Preferencias.altoPantalla/4)));

        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);


    } else {
        imageView = (MarkableImageView) convertView;
    }
    if(nivel == -1) {

        if(!Preferencias.getIdsImagenesSeleccionadasJuegoMemoria().isEmpty()) {
            if(Preferencias.getIdsImagenesSeleccionadasJuegoMemoria().size() > position) {
                imageView.setImageResource(
                    Preferencias.imagenesTodas[Preferencias.getIdsImagenesSeleccionadasJuegoMemoria().get(position)]);
            }
        }
    } else if(nivel == 0) {
        if(!listaIdsDescubiertas.isEmpty()) {
            if(listaIdsDescubiertas.size() > position) {
                imageView.setImageResource(Preferencias.imagenesTodasPequeñas[listaIdsDescubiertas.get(position)]);
            }       
        }
    } else { 
        switch(nivel) {
            case 1:
                imageView.setImageResource(Preferencias.imagenesNivel1[position]);
                break;
            case 2: 
                imageView.setImageResource(Preferencias.imagenesNivel2[position]);
                break;
        }

        if(!listaIdsDescubiertas.isEmpty()) {
            for(Integer pos : listaIdsDescubiertas) {
                if(calcularPosicion(position, nivel) == pos) {
                    imageView.setChecked(true);
                }

            }
        }
    }

    return imageView;
}

すべてが完璧に機能しますが、問題は、画面を移動し始めると、再生を停止したい写真のブランドに見えますが、特定の位置の画面のマークが削除されることです。その後、もう一度画面をタッチすると、再び表示されます。永遠に表示されるように修正するにはどうすればよいですか?

2 番目の質問は、各画像が ImageView を拡張する TileJuegoMemoria というクラスであるグリッドを生成することです。

for (int r = 0; r < rows; r++) {
        LinearLayout row = new LinearLayout(this);
        row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));
        row.setGravity(Gravity.CENTER);
        for (int c = 0; c < columns; c++) {
            TileJuegoMemoria tile = new TileJuegoMemoria(this, tilebackResource,
                    tilesImagenesRepetidas.get(position), position, sideLength, sideLength);

            tile.setClickable(true);
            tile.setId(position);
            tile.setOnClickListener(tileOnClickListener);

            row.addView(tile);
            position++;
        }
        memoryBoardLayout.addView(row);
    }

各オブジェクトをリスナーに追加してクリックします。Listener には、次のようなメソッド onClick () があります。

tileOnClickListener = new OnClickListener() {

        @Override
        public void onClick(View v) {

            TileJuegoMemoria tempTile = (TileJuegoMemoria) v;

            if (tempTile.getVisibility() == TileJuegoMemoria.INVISIBLE || (!tempTile.isBackVisible)) {
                return;
            }
            int move = gameEngine.doMove(tempTile);
            if (move == -1) {
                return;
            }
            gameEngine.selectedTile = tempTile;
            gameEngine.selectedTile.flipOver();

            if (move == 2) {
                final Handler handler = new Handler();
                Timer t = new Timer();
                t.schedule(new TimerTask() {
                    public void run() {
                        handler.post(new Runnable() {
                            public void run() {             
                                TileJuegoMemoria precedentMoveselectedTile = gameEngine.movesArray[0];

                                if (gameEngine.selectedTile.tileFace.equals(precedentMoveselectedTile.tileFace)) {   
                                    if(eliminarAcertados) {
                                        gameEngine.selectedTile.hide();
                                        precedentMoveselectedTile.hide();
                                    }

                                } else {
                                    gameEngine.selectedTile.flipOver();
                                    precedentMoveselectedTile.flipOver();

                                    turnoJugador1 = !turnoJugador1;

                                }

                                gameEngine.clearMoveArray();
                            }
                        });
                    }
                }, 1000);
            }
        }
};
}

このゲームは、2 人のプレイヤーが交互に変化する 2 つの画面イメージをプレイするものです。私の質問は、プレーヤー 1 のターンの後に、2 つのランダムな画像をクリックしたコンピューターがどのようにそうするかということです。男女が思っていた画像をリストに保存し、その上で各画像の座標をPerformClick()します。私は何ができますか?ありがとう!

4

0 に答える 0