Question

Bonjour j'ai un GRIDVIEW que j'utilise pour montrer quelques photos sur (petit pouce de niveaux diffrent). Lorsque l'utilisateur se termine un niveau, je voudrais changer le pouce pour ce niveau. (Montrer une certaine façon qu'il a terminé).

J'ai créé deux pouces pour chaque niveau. L'un est l'original et qui montre que le niveau est terminé.

Mais comment puis-je changer la source des images?

Le code que j'utilise pour dessiner les images ressemble à ceci.

L'activité principale:

/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.maps);

  GridView gridview = (GridView) findViewById(R.id.gridview);
  gridview.setAdapter(new ImageAdapter(this));

  gridview.setOnItemClickListener(new OnItemClickListener() {
    @Override
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        //Open the map which was clicked on, if there is one
        if(position+1 > 1){
            Toast.makeText(maps.this, "Level " + (position+1) + " is not yet available!", Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(maps.this, "Opening Level " + (position+1), Toast.LENGTH_SHORT).show();
            Intent myIntent = new Intent(v.getContext(), Tutorial2D.class);
            startActivity(myIntent);
        }
      }
  });
}

La ImageAdapter Classe:

public class ImageAdapter extends BaseAdapter {
private Context mContext;

public ImageAdapter(Context c) {
    mContext = c;
}

public int getCount() {
    return mThumbIds.length;
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    //Changing
    imageView.setImageResource(mThumbIds[position]);
    return imageView;
}



// references to our images
private Integer[] mThumbIds = {
        R.drawable.map1, R.drawable.map2, R.drawable.map3,
        R.drawable.map4, R.drawable.map5, R.drawable.map6,
        R.drawable.map7, R.drawable.map8, R.drawable.map9,
        R.drawable.map10, R.drawable.map11, R.drawable.map12,
        R.drawable.map13, R.drawable.map14, R.drawable.map15,
        R.drawable.map16, R.drawable.map17, R.drawable.map18,
        R.drawable.map19
};

}

Était-ce utile?

La solution

Vous pouvez créer une nouvelle image à base de pouce et d'en tirer vos graphiques supplémentaires sur l'aide d'une toile. Ensuite, vous pouvez passer ce bitmap à l'aide de imageview imageView.setImageBitmap

[modifier]

quelque chose comme

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    if (mLevelfinished) {

        //create thumbnail bitmap
        mThumbBmp = BitmapFactory.decodeResource(mResources, mThumbIds[position]);

        //draw a check over the bitmap
        Canvas c = new Canvas(mThumbBmp);
        c.drawBitmap(mCheckBitmap, destX, destY, null);

        imageView.setImageBitmap(mThumbBmp);
    } else {
        imageView.setImageResource(mThumbIds[position]);
    }

    return imageView;
}

[Edit2]

Je vois maintenant je un peu mal compris votre question .. doh. Au lieu de créer le pouce complet niveau dynamique, vous avez déjà les pouces pour ceux-ci. Dans ce cas, je voudrais créer un autre tableau qui a les pouces remplis et choisissez la ressource à partir du tableau correct. Et pour coller avec les tableaux, peut-être stocker l'achèvement de niveau dans un aussi:

imageView.setImageResource((mLevelCompleted[position]) ? mThumbCompleteIds[position] : mThumbIds[position]);

Autres conseils

Je suis le même problème. Voici ce que je fais:

gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    Toast.makeText(Punch.this, "" + mThumbIds[position], Toast.LENGTH_SHORT).show();
     mThumbIds[position]=R.drawable.crabx;//crabxImg;

  //here is where I would like to redraw the whole grid but it will not let me. 
  //Because ImageAdapter is not defined within this callback.

  }


})

J'utilise un truc sale qui pourrait être utile lorsque vous savez déjà ce que bitmaps sera affiché.

Je mis en place une autre ImageView invisible juste de côté le visible, et manipuler

myImageView.setVisibility(n); // (n = 0 = View.VISIBLE) or (n = 8 = View.GONE)

Ne pas utiliser la View.INVISIBLE constante qui valorise 4, car View.GONE est l'effet escompté. Lorsque la visibilité est définie sur View.GONE, l'objet ne prendra pas l'espace dans la mise en page. Ceci est similaire à display: none; de CSS.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top