Frage

Hallo habe ich eine Gridview, die ich benutze die Bilder auf (kleine Daumen verschiedener Ebenen). Wenn der Benutzer eine Ebene abgeschlossen ist, würde Ich mag die Daumen für diese Ebene ändern. (Irgendwie zeigt, dass es abgeschlossen ist).

habe ich zwei Daumen für jedes Niveau. Eine davon ist die ursprüngliche und eine, die zeigt, dass das Niveau abgeschlossen ist.

Aber wie kann ich die Quelle der Bilder ändern?

Der Code, den ich verwende, um die Bilder wie folgt aussieht zu ziehen.

Die Haupttätigkeit:

/** 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);
        }
      }
  });
}

Die ImageAdapter Klasse:

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
};

}

War es hilfreich?

Lösung

Sie könnten eine neue Bitmap erstellen aus einem Daumen basiert und ziehen Ihre persönlichen Grafiken über eine Leinwand verwenden. Dann könnten Sie diese Bitmap in die Imageview mit imageView.setImageBitmap geben

[Bearbeiten]

so etwas wie

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]

Ich sehe jetzt irgendwie ich Ihre Frage falsch verstanden .. doh. Anstatt die Ebene komplett Daumen dynamisch erstellen, haben Sie bereits den Daumen für diejenigen. In diesem Fall würde ich ein anderes Array erstellen, das diese abgeschlossene Daumen und hole die Ressource von der korrekten Array hat. Und mit Arrays zu halten, speichern vielleicht das Niveau Abschluss in einer auch:

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

Andere Tipps

Ich habe das gleiche Problem. Hier ist, was ich tun:

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.

  }


})

Ich bin mit einem schmutzigen Trick, die nützlich sein können, wenn Sie vorher wissen, welche Bitmaps werden angezeigt.

ich eine andere unsichtbare ImageView nur beiseite die sichtbaren einrichten und bearbeiten

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

Verwenden Sie die Konstante View.INVISIBLE nicht die 4 Werte, weil View.GONE die richtige Wirkung. Wenn die Sichtbarkeit auf View.GONE gesetzt ist, nehmen Sie das Objekt nicht Platz im Layout. Dies ist vergleichbar mit display: none; von CSS.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top