如何在点击时将图像设置为背景图像?

2024-04-10

我有一个活动显示带有不同图像的网格视图。当单击其中一个图像时,我希望单击的图像成为另一个活动的背景图像。

我怎样才能做到这一点?

这是我的活动,显示网格视图:

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

因此,发帖者(最初)没有准确指定是否要在单击时立即打开其他活动,或者是否只需要记录所单击项目的图像以供以后使用。第一个问题对我来说似乎更常见,例如GridView显示一组图像缩略图。用户单击它,就会出现一个仅显示该项目信息的新活动。该缩略图可能会全屏显示。不管怎样,也许这不是发帖人的想法,但这是我的假设(也许有人最终会在考虑到这样的用例的情况下找到这个答案)。

它还没有指定图像的存储方式,所以我会假设

  1. The ImageAdapter的图像是该应用程序的捆绑资源
  2. 我们可以对以下内容进行一些更改ImageAdapter,存储一些数据来解决这个问题

因此,我采取了一个标准ImageAdapter,并添加一行代码来记录每个ImageView的整数资源ID,在ImageView的tag财产。有很多方法可以做到这一点,但这是我选择的方法。

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额外(HelloGridViewActivity.java):

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

      final Context activity = this;

      gridView.setOnItemClickListener(new OnItemClickListener() {

         public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Object tag = v.getTag();
            if (tag instanceof Integer) {
               // we stored a reference to the thumbnail image in the ImageView's tag property
               Intent i = new Intent(activity, AnotherActivity.class);
               Integer resourceId = (Integer)tag;
               i.putExtra("backgroundImage", resourceId);
               startActivity(i);
            }
         }
      });
   }

最后,当新活动(AnotherActivity)打开后,我们检索该 Intent extra,并将其解码为整数资源 id,并将其设置为全屏背景图像ImageView(另一个Activity.java):

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

我还在上面显示了一些注释掉的代码,如果由于某种原因你需要传递一个string图像资源的名称,而不是integer资源代码。注释掉的代码查找给定图像名称的资源 ID。根据我的 ImageAdapter 中使用的资源名称,要传递的示例字符串名称可能是"pic1"。当然,如果这样做,调用 Activity (HelloGridViewActivity) 需要将 Intent extra 编码为字符串,而不是整数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在点击时将图像设置为背景图像? 的相关文章

随机推荐

  • 部署应用程序 Django Rest 时运行 ASGI 环境的问题

    我正在使用 Django 开发一个应用程序 我最初使用 WSGI 环境将其部署在 Google Cloud Platform 上 现在我在应用程序中进行了添加并使用了通道 因此我必须从 WSGI 转移到 ASGI 但我在部署时遇到错误当我使
  • 如何使用 ng-option 设置 select 元素的默认值

    我在这里看到了 Angular select 指令的文档 http docs angularjs org api ng directive select http docs angularjs org api ng directive se
  • 排除 Sonarqube 中的方法

    使用 sonarqube 进行分析时 有没有办法排除类中的特定方法 我找到的只是如何排除文件和模块 除非你想用以下方法包围这些方法标记评论并使用排除 https docs sonarqube org latest project admin
  • 如何修改此代码以使用函数而不是 lambda?

    我有一个有效的斐波那契函数 它从虚拟列表 1 1 1 1 1 1 返回斐波那契数列表 这是我的代码 list
  • 使用 C++11 复制构造 boost::shared_ptr 时出错

    昨天我安装了 clang 3 1 和 g 4 7 并尝试编译我正在处理的项目 我很惊讶地发现它没有使用这两个编译器进行编译 但最令我惊讶的是 问题出在boost shared ptr 显然 由于该类定义了移动构造函数 赋值运算符 因此复制构
  • 选择单个随机值组合的算法?

    说我有y不同的值 我想选择x他们是随机的 执行此操作的有效算法是什么 我可以打电话rand x次 但如果x y很大 注意组合这里需要 每个值应该有相同的被选择概率 但它们在结果中的顺序并不重要 当然 任何算法生成排列 questions t
  • Android Studio 2.0/2.1/3.0+ 不兼容 Bitbucket 插件 1.2.1

    我已将 Android Studio 版本更新到 2 0 并且在加载 Android Studio 时面临 bitbucket 插件 1 2 1 不兼容的问题 Android Studio 的事件日志显示 插件错误加载插件时发现问题 以下插
  • 如何使用 scalatra 通过 sbt-assemble 创建包含 webapp 资源的可执行单个 jar

    我正在通过 sbt 和 xsbt web plugin 使用 scalatra 框架制作 web 应用程序 我想将所有资源 模板 css js 打包到一个 jar 中 在带有 sbt assemble 插件的 sbt 中 assembly命
  • 查找返回有状态会话 bean 的新实例

    我在用Java EE 5 EJB 3 0 Jboss AS 4 3 2 我有最简单的Stateful bean Local public interface IStateBean Stateful public class StateBea
  • C# 枚举条目名称中可以有连字符吗

    有没有办法让枚举条目的名称中带有连字符 例如 enum myEnum ok not ok 我看过有关的问题具有友好名称的枚举 https stackoverflow com questions 1415140 c enums can my
  • FB.getLoginStatus 弹出窗口内的 FB.login 被阻止

    我正在尝试使用 Facebook Javascript SDK 将 Facebook 登录集成到我的网站中 根据Facebook开发者文档提供的分步说明here https developers facebook com docs java
  • 模板函数中的默认模板需要空尖括号 <>

    gcc 11 2 似乎不能 https godbolt org z eY7x3MojP编译这个 template
  • 如何检查 params[:some][:field] 是否为零?

    我尝试了代码 这让很多人受益匪浅 如何测试rails中是否存在参数 https stackoverflow com questions 5629402 how to test if parameters exist in rails 但它不
  • STL容器内存问题[重复]

    这个问题在这里已经有答案了 我正在 Linux Fedora 10 和 CentOS 5 中使用 gcc 4 3 2 并使用 STL 容器实现我自己的图形库 然后我发现了一些内存问题 当我构建图表时 我使用了大量内存来查看top或其他内存使
  • Ngxs - 调用 Angular 服务:好的做法吗?

    当我使用ngxs我的应用程序应该做什么 我的组件调用一个服务 并且该服务调度一个操作 结果作为有效负载 我的组件调度一个动作 我的 状态调用服务 我的观点是 Dispatched Action 本身应该是不可变的 并且不用于返回结果 相反
  • 如何从我的应用程序启动默认音乐播放器?

    我制作了一个应用程序ListView 当我点击ListView项目 一个 ogg声音文件应该开始播放 不在我的应用程序中 而是在用户的默认音乐播放器应用程序中 我怎样才能做到这一点 Try this Intent it new Intent
  • Java - 作为普通代码运行字符串[重复]

    这个问题在这里已经有答案了 有没有办法将字符串作为代码运行 我的意思是如果我运行的字符串有价值System out println Hello World 我可以像普通代码一样运行该字符串 然后输出将是 Hello World 吗 例如 S
  • 如何将单个图像转换为 MP4 视频?

    如何将单个图像转换为 mp4 视频 例如 我需要播放同一张图像20秒 持续时间将是动态的 我知道这是可能的ffmpeg 我在谷歌和SO中搜索 但不幸的是 我无法找到正确的教程 我只是想要一个正确的方向 欢迎任何意见或建议 基本语法是 ffm
  • 无法登录在 django 管理后端创建的超级用户

    我试图在 django 管理后端创建超级用户 但不知何故我无法让他们登录 这是我的用户类别 class User AbstractBaseUser PermissionsMixin email models EmailField uniqu
  • 如何在点击时将图像设置为背景图像?

    我有一个活动显示带有不同图像的网格视图 当单击其中一个图像时 我希望单击的图像成为另一个活动的背景图像 我怎样才能做到这一点 这是我的活动 显示网格视图 public class HelloGridViewActivity extends