2

大约一个小时前,我刚刚问了一个问题,在等待答复时,我想也许我可以以不同的方式实现我想要的。我正在考虑更改图像,但如果我可以在网格视图中的完整关卡的顶部覆盖一些东西会更好,即一个小勾号图标 目前,当一个关卡完成时,我将它与 sharedpreferences 一起存储

所以我有一个 gridView 布局来显示代表级别的图像。假设对于这个例子,我有 20 个级别。当一个关卡完成时,是否可以覆盖勾号图标或以某种方式突出显示关卡图像。也许改变图像的边框?

这是我使用的图像数组

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 case 来执行其他任务,并将项目字符串更改为它所代表的图像的名称。

    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 回答