Android GridView-如何动态更改位图?
你好,我有一个gridView,我用它来显示一些图片(不同级别的小拇指)。 当用户完成一个级别时,我想更改该级别的拇指。(以某种方式表明它已经完成) 我为每个级别创建了两个拇指。一个是原始的,另一个显示级别已完成 但是我怎样才能改变图像的来源呢 我用来绘制图像的代码如下所示 主要活动:Android GridView-如何动态更改位图?,android,gridview,bitmap,bitmapsource,Android,Gridview,Bitmap,Bitmapsource,你好,我有一个gridView,我用它来显示一些图片(不同级别的小拇指)。 当用户完成一个级别时,我想更改该级别的拇指。(以某种方式表明它已经完成) 我为每个级别创建了两个拇指。一个是原始的,另一个显示级别已完成 但是我怎样才能改变图像的来源呢 我用来绘制图像的代码如下所示 主要活动: /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { su
/** 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);
}
}
});
}
}您可以基于拇指创建一个新位图,并使用画布在其上绘制额外的图形。然后可以使用imageview.setImageBitmap将该位图传递给imageview [编辑] 差不多
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;
}
[编辑二]
我现在明白了我有点误解了你的问题。。doh。您已经拥有了这些功能的拇指,而不是动态创建完整的拇指级别。在这种情况下,我将创建另一个具有完整拇指的数组,并从正确的数组中选择资源。为了坚持使用阵列,还可以将级别完成存储在一个阵列中:
imageView.setImageResource((mLevelCompleted[position]) ? mThumbCompleteIds[position] : mThumbIds[position]);
我也有同样的问题。 以下是我的工作:
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.
}
})
gridview.setAdapter(新的ImageAdapter(this));
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Toast.makeText(Punch.this,“+mThumbIds[position],Toast.LENGTH_SHORT).show();
mThumbIds[position]=R.drawable.crabx;//crabxImg;
//在这里,我想重新绘制整个网格,但它不会让我。
//因为此回调中未定义ImageAdapter。
}
})
我使用了一个肮脏的技巧,当您之前知道将显示哪些位图时,它可能会很有用
我在可见视图旁边设置了另一个不可见的ImageView
,然后
myImageView.setVisibility(n); // (n = 0 = View.VISIBLE) or (n = 8 = View.GONE)
不要使用常量
视图.INVISIBLE
值4
,因为View.GONE
是正确的效果。当可见性设置为View.GONE
时,对象将不会占用布局中的空间。这类似于显示:无代码>来自CSS。您能再精确一点吗?你有我可以看的示例代码吗?我不明白为什么我应该创建一个画布来进行图像处理?我用一些代码更新了我的答案。要操作位图,你需要一个画布对象。我在SharedReference中保存了一些missionCompletedVariables,并从右边的数组中创建了所需的图片。谢谢
myImageView.setVisibility(n); // (n = 0 = View.VISIBLE) or (n = 8 = View.GONE)