Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在单击时将图像设置为背景图像?_Android_Image_Background - Fatal编程技术网

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