2017-01-05 11 views
2

私は比較的Androidで新しく、ドラッグ&ドロップ機能を備えた水平スクロールビューを作成しています。今はすべて正常に動作しています。イメージをドラッグしてドロップゾーンにドロップでき、成功したドロップが失敗しました。今のところ、ドラッグされているイメージとその影は同じように見えます。私が望むのは、画像をドラッグすると、その画像に現れる影が、私が選択したドロアブルからの画像であるということです。ここでdrawableの画像のIDを取得する方法

はシャドウビルダーのためのコードです:

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

私はドロウアブルからある特定の画像のIDを取得し、その後、私はドロウアブルから(View.DragShadowBuilderに画像のIDを使用することができますしたい )影の画像を変更します。この点に関する助けに感謝します。

+1

R.drawble.imageId –

+0

drawableを返すのに対し、imageviewまたはintが必要です。 – JBJ

答えて

0

(私はこの記事が複数のビューを取得し、私がログインするたびに見ていると私は長い時間前にこれを解決しましたしかし私はそれが他の誰かを助けることを望んで解決策を投稿するつもりです。私は、私が使用していた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); 

私はちょうど私がドロウアブルから直接別の画像にアクセスし、複数のimageViews上のドラッグイメージとしてそれらを使用する助けたコードの一部を掲載しました。

1

それは次のようになります:

R.drawable.resourcename 

それは、Eclipse(あなたが使用しているものthatsの場合)を混乱させることとしてあなたはAndroid.R名前空間をインポート持っていないことを確認してください。

問題が解決しない場合、あなたは常にコンテキストのgetResourcesメソッドを使用することができます... this.contextが活動、サービスまたはその他のコンテキストサブクラスとしてintialisedさ

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

更新:

それはあなたが望む名、リソースクラスの場合

(getResources()が返す)getResourceName(int)メソッド、およびgetResourceTypeName(int)を持っていますか?

アップデート2:

公共int型getIdentifier(文字列名、文字列DEFTYPE、文字列defPackage)指定されたリソース名の整数、種類&パッケージを返し :

リソースクラスは、このメソッドを持っています。

0
String uri = "@drawable/yourdrawable"; 
int imageResource = getResources().getIdentifier(uri, null, getPackageName()); 

これを試すことができますか?

+0

ここにエラーがあります - DragShadowBuilderのDragShadowBuilder(android.view.View)を(int) – JBJ

+0

に適用できませんこのリンクを見つけましたかhttp://stackoverflow.com/questions/32198394/android-how-to-use- dragShadowBuilderこれは、DragShadowBuilderの実装に役立ちます。 –

+0

シャドウビルダーがすでにうまく動作していることです。私が望むのは、何とかドロアブルにアクセスして、それをクリックして影をつくることです。 – JBJ

0

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

すべての画像をその特定の影の画像に変更しますが、影の画像(変更されたときに表示される)が変わる場所が変わるはずです。 – JBJ

+0

私は理解できませんでしたことを教えてください? –

+0

imageIdは、水平スクロールビューの線形レイアウトでの実際のイメージのIDです。基本的には、ドラッグされているアイテムのIDです。イメージビューがどのようなものか、ドラッグされているかを特定することができます。 *最終ImageViewドラッグ=(ImageView)を使用すると、findViewById(R.id.imageId); drag.setImageResource(R.drawable.a1); * オリジナルの画像を変更したのと同じですが、元の画像は同じままで、シャドウを変更したいだけです。 – JBJ

0

、これを試しては、あなたの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); 
関連する問題