Android 如何在单击时将图像设置为背景图像?
我有一个活动,显示了不同图像的网格视图。当单击其中一个图像时,我希望单击的图像是另一个活动的背景图像 我该怎么做 这是我的活动,显示网格视图:Android 如何在单击时将图像设置为背景图像?,android,image,background,Android,Image,Background,我有一个活动,显示了不同图像的网格视图。当单击其中一个图像时,我希望单击的图像是另一个活动的背景图像 我该怎么做 这是我的活动,显示网格视图: public class HelloGridViewActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.la
public class HelloGridViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridView = (GridView) findViewById(R.id.gridview);
// Instance of ImageAdapter Class
gridView.setAdapter(new ImageAdapter(this));
/**
* On Click event for Single Gridview Item
* */
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//WHAT SHALL I PUT HERE????
}
}
}
公共类HelloGridViewActivity扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView GridView=(GridView)findViewById(R.id.GridView);
//ImageAdapter类的实例
setAdapter(新的ImageAdapter(this));
/**
*单个Gridview项目的单击事件
* */
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
//我应该在这里放什么????
}
}
}
获取要作为背景的图像的资源ID,并将其保存到首选项
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
saveImageId(position);
}
private void saveImageId(int position) {
int id = getImageId(); // get the R.drawable.* id of the image. You should be able to figure this out.
Editor ed = PreferenceManager.getDefaultSharedPreferences(this).edit();
ed.putInt("bg_image_id", id);
ed.commit();
}
祝您好运获取您想要作为背景的图像的资源ID,并将其保存到首选项
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
saveImageId(position);
}
private void saveImageId(int position) {
int id = getImageId(); // get the R.drawable.* id of the image. You should be able to figure this out.
Editor ed = PreferenceManager.getDefaultSharedPreferences(this).edit();
ed.putInt("bg_image_id", id);
ed.commit();
}
祝你好运因此,海报没有(最初)确切地指定是否在单击时立即打开其他活动,或者是否只需要录制单击项目的图像以供以后使用。第一个问题对我来说更常见,例如在显示一组图像缩略图的GridView
中。用户单击该活动,然后一个新的活动只显示该项目的信息出现了。缩略图可能会全屏显示。无论如何,可能这不是海报的想法,但这是我的假设(可能有人最终会在考虑了这样一个用例的情况下找到这个答案)
它也没有指定图像的存储方式,所以我假设
ImageAdapter
的图像是此应用程序的捆绑资源ImageAdapter
进行一些更改,以存储一些数据来解决此问题ImageAdapter
,在ImageView的标记
属性中添加一行代码来记录每个ImageView的整数资源ID
public class ImageAdapter extends BaseAdapter {
/* see code removed at
http://developer.android.com/resources/tutorials/views/hello-gridview.html
*/
// 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;
}
imageView.setImageResource(mThumbIds[position]);
// here we record the resource id of the image, for easy access later
imageView.setTag(mThumbIds[position]);
return imageView;
}
// references to our images
private Integer[] mThumbIds = {
R.drawable.pic1,
R.drawable.pic2,
R.drawable.pic3,
R.drawable.pic4,
R.drawable.pic5
};
}
然后,当Hello活动单击一个网格项时,我检索图像的资源id并将其作为Intent
extra(HelloGridViewActivity.java)传递:
我还在上面展示了一些注释掉的代码,如果出于某种原因,您需要传递图像资源的字符串名称,而不是整数资源代码。注释掉的代码查找给定图像名称的资源id。根据我的ImageAdapter中使用的资源名称,将一个示例字符串名称传递给pass可能是“pic1”
。如果这样做,当然,调用活动(HelloGridViewActivity)需要将意图额外编码为字符串,而不是整数。因此,海报没有(最初)确切地指定是否在单击时立即打开其他活动,或者是否只需要录制单击项目的图像以供以后使用。第一个问题对我来说更常见,例如在显示一组图像缩略图的GridView
中。用户单击该活动,然后一个新的活动只显示该项目的信息出现了。缩略图可能会全屏显示。无论如何,可能这不是海报的想法,但这是我的假设(可能有人最终会在考虑了这样一个用例的情况下找到这个答案)
它也没有指定图像的存储方式,所以我假设
ImageAdapter
的图像是此应用程序的捆绑资源ImageAdapter
进行一些更改,以存储一些数据来解决此问题ImageAdapter
,在ImageView的标记
属性中添加一行代码来记录每个ImageView的整数资源ID
public class ImageAdapter extends BaseAdapter {
/* see code removed at
http://developer.android.com/resources/tutorials/views/hello-gridview.html
*/
// 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;
}
imageView.setImageResource(mThumbIds[position]);
// here we record the resource id of the image, for easy access later
imageView.setTag(mThumbIds[position]);
return imageView;
}
// references to our images
private Integer[] mThumbIds = {
R.drawable.pic1,
R.drawable.pic2,
R.drawable.pic3,
R.drawable.pic4,
R.drawable.pic5
};
}
然后,当Hello活动单击一个网格项时,我检索图像的资源id并将其作为Intent
extra(HelloGridViewActivity.java)传递:
我还在上面展示了一些注释掉的代码,如果出于某种原因,您需要传递图像资源的字符串名称,而不是整数资源代码。注释掉的代码查找给定图像名称的资源id。根据我的ImageAdapter中使用的资源名称,将一个示例字符串名称传递给pass可能是
“pic1”
。如果这样做,调用活动(HelloGridViewActivity)当然需要将意图额外编码为字符串,而不是整数。如果您以某种方式在GridView中加载图像,则只需发送相同的信息(URL或文件URI)使用Intent调用您的第二个活动。@user1420042:如何使用资源ID或文件URI填充GridView
适配器?如果您以某种方式在GridView中加载图像,则只需发送相同的信息(URL或文件URI)使用Intent连接到第二个活动。@user1420042:如何使用资源ID或文件URI填充GridView
适配器?SharedReferences应用于应用程序首选项,而不是临时数据。在GridView活动中使用全局静态变量来存储单击的映像的资源ID会更好解决方案。“//获取图像的R.drawable.*id。您应该能够解决此问题。”如果我不明白呢out@shanet:您评论中的建议并不比BananaNutTruffles的答案更有效。您俩都没有听说过意图
附加功能吗?OP想要开始一项新的活动
…这不是一个很难回答的问题。这是一个应用程序偏好。不是吗?他没有开始一项新的活动活动。他正在为任何时候的活动设置背景
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.another);
Intent i = getIntent();
//String bgImage = i.getExtras().getString("backgroundImage");
int resId = i.getExtras().getInt("backgroundImage");
try {
ImageView background = (ImageView) findViewById(R.id.bgImage);
// Another alternative, if the intent extra stored the resource 'name',
// and not the integer resource id
//Class<?> c = R.drawable.class;
//background.setImageResource(c.getDeclaredField(bgImage).getInt(c));
background.setImageResource(resId);
} catch (Exception e) {
e.printStackTrace();
}
}