2016-05-30 10 views
2

ImageViewのドラッグをリッスンするコードをいくつか持っていますが、最後のものだけを聴いてそのすべてを聴きたいと思っています。問題は、ImageViewが動的に作成され、すべてが同じ名前になるため、最後のものにのみ適用されるということです。ここで同じ名前の複数の画像にOnLongClickListenerを適用する

は、コードを作成ImageViewのである:

public ImageView getCardView(String Card) { 

     imageView = new ImageView(this); 

     switch (Card) { 
      case "ace-clubs": 
       imageView.setImageResource(R.drawable.black_joker); 
       imageView.setId(Integer.valueOf(CardId)); 
       break; 
      case "ace-diamonds": 
       imageView.setImageResource(R.drawable.ace_of_diamonds); 
       imageView.setId(Integer.valueOf(CardId)); 
       break; 

      case "ace-hearts": 
       imageView.setImageResource(R.drawable.ace_of_hearts); 
       imageView.setId(Integer.valueOf(CardId)); 
       break; 
     } 

     CardId++; 

     final float scale = getResources().getDisplayMetrics().density; 
     int padding_5dp = (int) (5 * scale + 0.5f); 
     int Height = (int) (100 * scale + 0.5f); 
     int Width = (int) (60 * scale + 0.5f); 


     imageView.setBackgroundColor(Color.WHITE); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Width, Height); 
     imageView.setLayoutParams(params); 
     imageView.setPadding(2, 0, 2, 0); 
     params.rightMargin = 8; 
     params.leftMargin = 8; 

     return imageView; 

    } 

そして、ここでは、画像は名前だけで、最後のImageViewのに適用されることをリッスンします:

imageView.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       ClipData.Item item = new ClipData.Item((CharSequence)v.getTag()); 
       String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN}; 

       ClipData dragData = new ClipData(v.getTag().toString(),mimeTypes, item); 
       View.DragShadowBuilder myShadow = new View.DragShadowBuilder(imageView); 

       v.startDrag(dragData,myShadow,null,0); 
       return true; 
      } 
     }); 

     imageView.setOnDragListener(new View.OnDragListener() { 
      @Override 
      public boolean onDrag(View v, DragEvent event) { 
       switch(event.getAction()) 
       { 
        case DragEvent.ACTION_DRAG_STARTED: 
         layoutParams = (RelativeLayout.LayoutParams)v.getLayoutParams(); 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_STARTED"); 

         // Do nothing 
         break; 

        case DragEvent.ACTION_DRAG_ENTERED: 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_ENTERED"); 
         int x_cord = (int) event.getX(); 
         int y_cord = (int) event.getY(); 
         break; 

        case DragEvent.ACTION_DRAG_EXITED : 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_EXITED"); 
         x_cord = (int) event.getX(); 
         y_cord = (int) event.getY(); 
         layoutParams.leftMargin = x_cord; 
         layoutParams.topMargin = y_cord; 
         v.setLayoutParams(layoutParams); 
         break; 

        case DragEvent.ACTION_DRAG_LOCATION : 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_LOCATION"); 
         x_cord = (int) event.getX(); 
         y_cord = (int) event.getY(); 
         break; 

        case DragEvent.ACTION_DRAG_ENDED : 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_ENDED"); 

         // Do nothing 
         break; 

        case DragEvent.ACTION_DROP: 
         Log.d(msg, "ACTION_DROP event"); 

         // Do nothing 
         break; 
        default: break; 
       } 
       return true; 
      } 
     }); 

     imageView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        ClipData data = ClipData.newPlainText("", ""); 
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(chosenCards); 

        imageView.startDrag(data, shadowBuilder, imageView, 0); 
        imageView.setVisibility(View.INVISIBLE); 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
     }); 

感謝:)

答えて

1

Iあなたの質問を100%理解していても、最後のImageViewのCardIdを追跡する必要があります。

+0

私は、plsは私はあなたの問題を解決する最良の方法は、前のビューからOnLongClickListenerオブジェクトを削除し、新しいImageViewのにそれを追加することだと思います –

+1

@YudiMoszkowski を説明...理解していません。 'プライベートのOnLongClickListenerリスナー。 ... lastImageView.setOnLongClickListener(null); newImageView.setOnLongClickListener(listener)// lastImageView'になります。 –

関連する問題