【问题标题】:How to get ID of images in drawable如何在drawable中获取图像的ID
【发布时间】:2017-01-05 07:01:23
【问题描述】:

我对 android 比较陌生,我正在开发具有拖放功能的水平滚动视图。现在一切都工作得很好,我可以将图像拖放到放置区,其中包含失败和成功放置的计数。现在,被拖动的图像和它的阴影看起来是一样的。我想要的是,当我拖动图像时,该图像出现的阴影是我选择的可绘制图像中的图像。

这是影子生成器的代码:

 void dragAndDropImage(int imageId)
{
   // int drawableid = getResources().getIdentifier("drawable/a1", "id", getPackageName());
    final ImageView drag = (ImageView)findViewById(imageId);

    drag.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent arg1) {
            // TODO Auto-generated method stub
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadow = new View.DragShadowBuilder(drag);//I want the drawable id here View.DragShadowBuilder(drawableid)
            v.startDrag(data, shadow, null, 0);
            return false;
        }
    });

我想从 drawables 中获取一个特定图像的 id,然后我可以在 View.DragShadowBuilder(id of the image from drawables) 中使用它来更改阴影的图像。感谢您提供这方面的任何帮助。

【问题讨论】:

  • R.drawble.imageId
  • 返回 drawable 而我想要 imageview 或 int。

标签: java android android-studio drag-and-drop


【解决方案1】:

会是这样的:

R.drawable.resourcename

确保您没有导入 Android.R 命名空间,因为它会混淆 Eclipse(如果您正在使用它)。

如果这不起作用,您始终可以使用上下文的 getResources 方法...

Drawable resImg = this.context.getResources().getDrawable(R.drawable.resource);

this.context 被初始化为 Activity、Service 或任何其他 Context 子类。

更新:

如果是您想要的名称,Resources 类(由 getResources() 返回)有一个 getResourceName(int) 方法和一个 getResourceTypeName(int)?

更新 2:

Resources 类有这个方法:

public int getIdentifier (String name, String defType, String defPackage) 返回指定资源名称、类型和包的整数。

【讨论】:

    【解决方案2】:

    (我每次登录时都会看到这篇文章获得更多浏览量,我很久以前就解决了这个问题,但我将发布解决方案,希望它可以帮助其他人。) 就我而言,我在 Drawable 中有多个我想使用的图像

     for (int j=1; j<10; j++)
        {
            setImages("drawable/img" +j);
            //  SetPopup(drag);
        }
    
    void setImages(final String draw)
    {
        int id12 = getResources().getIdentifier(draw, "id", "your_package_name");
        drag1.setImageResource(id12);
    

    我刚刚发布了帮助我直接从可绘制对象访问不同图像并将它们用作多个图像视图上的拖动图像的代码部分。

    【讨论】:

      【解决方案3】:
      String uri = "@drawable/yourdrawable";
      int imageResource = getResources().getIdentifier(uri, null, getPackageName());
      

      你可以试试这个吗?

      【讨论】:

      • 这是错误 - DragShadowBuilder (android.view.View) 中的 DragShadowBuilder (android.view.View) 不能应用于 (int)
      • 您是否遇到过此链接stackoverflow.com/questions/32198394/… 这可能有助于您实施 DragShadowBuilder。
      • 问题是影子生成器已经工作正常了。我想要的是以某种方式访问​​可绘制对象并使用它们在点击时构建阴影。
      【解决方案4】:

      试试这个,

      final ImageView drag = (ImageView)findViewById(R.id.imageId);
      drag.setImageResource(R.drawable.a1);
      View.DragShadowBuilder shadow = new View.DragShadowBuilder(drag);
      

      【讨论】:

      • 它将所有图像更改为该特定阴影图像,而它应该是图像保持不变的地方,只有它们的阴影(拖动时会出现)发生变化。
      • 我没看懂你能解释一下吗?
      • imageId 是水平滚动视图线性布局中实际图像的id。基本上它是被拖动的项目的 id,或者你可以说它是识别要或被拖动的图像视图。当我使用 final ImageView drag = (ImageView)findViewById(R.id.imageId); drag.setImageResource(R.drawable.a1); 它也改变了我的原始图像,而我希望原始图像保持不变,只希望阴影改变。
      【解决方案5】:

      假设您的 Android 资源文件夹中有多个可绘制对象以及要迭代它们的内容。您使用特定的命名架构并希望使用它来确定资源 ID。

      以下步骤展示了如何根据资源名称获取资源 ID:

         // Name of resource 
        //Type
       // Package of the app
      
       int identifier = getResources().getIdentifier("pic1", "drawable", "android.demo");
              ImageView image = (ImageView) findViewById(R.id.imageView1);
              image.setImageResource(identifier);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多