2016-05-30 14 views
2

Also habe ich etwas Code, der für ein Ziehen eines ImageView lauscht, aber es hört nur das letzte und ich will es alle hören. Das Problem besteht darin, dass die ImageViews dynamisch erstellt werden und alle denselben Namen haben, sodass sie nur für den letzten gelten. HierApply OnLongClickListener auf mehrere Bilder mit dem gleichen Namen

ist die Erstellung von Imagecode:

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; 

    } 

Und hier sind die Bild hört nur, dass bis zum letzten Image mit dem Namen gelten:

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

Thanks :)

Antwort

1

I 100% sicher, dass du deine Frage verstanden hast, aber du solltest die CardId der letzten ImageView verfolgen.

+0

Ich verstehe nicht ... pls erklären –

+1

@YudiMoszkowski Ich denke, der beste Weg, um Ihr Problem zu lösen, ist das OnLongClickListener Objekt aus der vorherige Ansicht zu entfernen und sie auf die neue Imageview hinzuzufügen. 'private OnLongClickListener Listener; ... lastImageView.setOnLongClickListener (null); newImageView.setOnLongClickListener (Listener) // welches zum lastImageView wird ' –

Verwandte Themen