2

約 1 時間前に質問をしたばかりで、返事を待っている間に、私が望むことを別の方法で達成できるのではないかと考えていました。画像を変更することを考えていましたが、グリッドビューの完全なレベルの上に何かを重ねることができればもっと良いでしょう。つまり、小さな目盛りのアイコンです。現時点では、レベルが完了したときに共有設定で保存しています

したがって、レベルを表す画像を表示するための gridView レイアウトがあります。この例では、20 レベルあるとしましょう。1 つのレベルが完了すると、目盛りアイコンを重ねるか、何らかの方法でレベル イメージを強調表示することができます。たぶん、画像の境界線を変更しますか??

ここに私が使用する画像配列があります

int[] imageIDs = {
   R.drawable.one,
   R.drawable.two,
   R.drawable.three,
   R.drawable.four,
   R.drawable.five,
   R.drawable.six
   etc.......

そして、gridView で画像を設定するためのコードがあります。明らかに、間にさらに多くのコードがあります。

public View getView(int position, View convertView, ViewGroup parent) 
{
   ImageView imageView;
   if (convertView == null) {
       imageView = new ImageView(context);
       imageView.setLayoutParams(new GridView.LayoutParams(140, 140));
       imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
       imageView.setPadding(5, 5, 5, 5);
   } else {
       imageView = (ImageView) convertView;
   }
   imageView.setImageResource(imageIDs[position]);
   return imageView;

上記のいずれかを実行することは可能でしょうか。ボーダー メソッドでも問題ありません。助けてくれてありがとう


レベルが開いているときは、スイッチ ケースを使用して他のタスクを実行したり、アイテムの文字列をそれが表す画像の名前に変更したりしています。

    switch(question){
    case 0:
        iv.setImageResource(R.drawable.one);
        item = imageOne;
                    answer1 = "one"         

    break;
    case 1:
        iv.setImageResource(R.drawable.two);
        item = imageTwo;
                    answer1 = "two"
    break;
    default:
    break;
    }

次に、その文字列を呼び出して、ブール値を画像の名前で保存します

final boolean answerStatusCase = preferences.getBoolean(item, false);
final SharedPreferences.Editor editor = preferences.edit();

Button checkAnswer = (Button) findViewById(R.id.bCheckAnswer);
    checkAnswer.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            String yourAnswerCheck = yourAnswerReview.toString();

            if (yourAnswerCheck.equals(answer1)) {
                Toast.makeText(getBaseContext(), "That's correct", 2000).show();

                    editor.putBoolean(item, true);
                    editor.commit();    

            }else{
                Toast.makeText(getBaseContext(), "That's incorrect", 2000).show();
            }

        }

    });
4

1 に答える 1

9

ええ、間違いなく可能です。ImageViewメソッドで描画を単純にサブクラス化して処理できると思いますonDraw(Canvas)。例(これは単なる急ごしらえです。実際には、さまざまなサイズで描画し、さまざまなキャンバスサイズのディップで固定オフセットを処理するでしょう):

public class MarkableImageView extends ImageView {
    private boolean checked = true;

    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.check);
            int width = check.getWidth();
            int height = check.getHeight();
            int margin = 15;
            int x = canvas.getWidth() - width - margin;
            int y = canvas.getHeight() - height - margin;
            canvas.drawBitmap(check, x, y, new Paint());
        }
    }
}

例

編集:あなたのコードは次のようになります:

public View getView(int position, View convertView, ViewGroup parent) 
{
   MarkableImageView imageView;
   if (convertView == null) {
       imageView = new MarkableImageView(context);
       imageView.setLayoutParams(new GridView.LayoutParams(140, 140));
       imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
       imageView.setPadding(5, 5, 5, 5);
   } else {
       imageView = (MarkableImageView) convertView;
   }
   imageView.setImageResource(imageIDs[position]);
   imageView.setChecked(shouldBeChecked);
   return imageView;
于 2012-06-16T19:01:15.567 に答える