Java 如何在drawable中获取图像的ID

Java 如何在drawable中获取图像的ID,java,android,android-studio,drag-and-drop,Java,Android,Android Studio,Drag And Drop,我对安卓系统比较陌生,我正在开发一个带有拖放功能的水平滚动视图。现在一切都很好,我可以拖动图像并将其放置在放置区域中,包括失败和成功的放置次数。目前,正在拖动的图像及其阴影看起来是一样的。我想要的是,当我拖动一个图像时,该图像出现的阴影是我选择的drawables中的一个图像 以下是阴影生成器的代码: void dragAndDropImage(int imageId) { // int drawableid = getResources().getIdentifier("drawabl

我对安卓系统比较陌生,我正在开发一个带有拖放功能的水平滚动视图。现在一切都很好,我可以拖动图像并将其放置在放置区域中,包括失败和成功的放置次数。目前,正在拖动的图像及其阴影看起来是一样的。我想要的是,当我拖动一个图像时,该图像出现的阴影是我选择的drawables中的一个图像

以下是阴影生成器的代码:

 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(drawables中图像的id)中使用它来更改阴影的图像。感谢您在这方面提供的任何帮助。

这将是:

R.drawable.resourcename
确保没有导入Android.R名称空间,因为它可能会混淆Eclipse(如果您使用的是这个名称空间的话)

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

Drawable resImg = this.context.getResources().getDrawable(R.drawable.resource);
其中this.context被初始化为活动、服务或任何其他context子类

更新:

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

更新2:

Resources类具有以下方法:

public int getIdentifier(字符串名称、字符串定义类型、字符串定义包) 返回指定资源名称、类型和包的整数

String uri = "@drawable/yourdrawable";
int imageResource = getResources().getIdentifier(uri, null, getPackageName());
你能试试这个吗?

试试这个

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

假设您的Android资源文件夹中有多个Drawable,需要迭代哪些内容。您使用特定的命名模式,并希望使用它来确定资源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);
(我每次登录时都会看到这篇文章获得更多的浏览量,我很久以前就解决了这个问题,但我将发布这个解决方案,希望它能帮助其他人。) 在我的例子中,我有多个可绘制的图像,因此我想使用它们

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

for(int j=1;jR.drawble.imageIdReturns drawable,而我需要imageview或int。以下是错误-DragShadowBuilder中的DragShadowBuilder(android.view.view)无法应用于(int)您是否遇到此链接?这可能有助于您实现DragShadowBuilder。问题是,阴影生成器已经可以正常工作。我想要的是以某种方式访问可绘制图形,并使用它们在单击时创建阴影。它正在将所有图像更改为特定的阴影图像,而它应该是图像保留sam的位置e仅显示其阴影(拖动时显示)更改。我不明白。请您解释一下好吗?imageId是水平滚动视图线性布局中实际图像的id。基本上,它是正在拖动的项目的id,或者您可以说它是为了标识要拖动或正在拖动的图像视图。当我使用final ImageView drag=(ImageView)findViewById(R.id.imageId)时;drag.setImageResource(R.drawable.a1);它也更改了我的原始图像,而我希望原始图像保持不变,只希望阴影更改。