2013-05-09 4 views
0

Dans mon application android, je veux définir la frontière à la ImageView quand il est pressé longtemps. Je veux également supprimer le même (frontière) lorsque l'utilisateur libère la vue. S'il vous plaît, n'importe qui, aidez-moi dans ceci?Comment définir une bordure pour Android Imageview dans Longpress?

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
      mTouchDownX = (int) event.getX(); 
      mTouchDownY = (int) event.getY(); 
      break; 
     } 
     case MotionEvent.ACTION_MOVE: { 
      int x = (int) event.getX(); 
      int y = (int) event.getY(); 

      if (mDraggedItem >= 0) { 
       setDraggedItemPosition(x, y); 
       int index = getIndexFromCoordinates(x, y); 
       if (index == mDraggedItem || index < 0) break; 

       if (index < mDraggedItem) { 
        for (int i = index; i < mDraggedItem; i++) { 
         moveViewToPosition(i, i+1); 
        } 
        for (int i = mDraggedItem-1; i >= index; i--) { 
         View view = mGridMap.get(i); 
         mGridMap.put(i+1, view); 
        } 
       } else { 
        for (int i = index; i > mDraggedItem; i--) { 
         moveViewToPosition(i, i-1); 
        } 
        for (int i = mDraggedItem+1; i <= index; i++) { 
         View view = mGridMap.get(i); 
         mGridMap.put(i-1, view); 
        } 
       } 
       mLog.i("onTouchEvent - ACTION_MOVE - mDraggedItem: "+mDraggedItem+" index: "+index); 
       mGridMap.put(index, mDraggedView); 
       mDraggedItem = index; 
      } 
      break; 
     } 
     case MotionEvent.ACTION_UP: { 
      if (mDraggedItem >= 0) { 
       Point xy = getCoordinatesFromPosition(mDraggedItem); 
       mDraggedView.layout(xy.x, xy.y, xy.x+mChildSize, xy.y+mChildSize); 
       mDraggedView.clearAnimation(); 
       mDraggedView.setPadding(0, 0, 0, 0); 
       setOnClickListener(this); 
       invalidate(); 
       mRearrangeListener.onRearrange(mGridMap); 
      } 
      mDraggedItem = -1; 
      for(int i=0;i<mGridMap.size();i++) 
      { 
      String tag = mGridMap.get(i).getTag().toString(); 
      } 
      break; 
     } 
    } 

    return super.onTouchEvent(event); 

} 

@Override 
public boolean onLongClick(View v) { 

    int index = getIndexFromCoordinates(mTouchDownX, mTouchDownY); 
    if (index >= 0) { 
     // animate this item for enabling drag. 
     mDraggedItem = index; 
     mDraggedView = mGridMap.get(index); 
     mDraggedView.setPadding(2, 2, 2, 2); 
     mDraggedView.setBackgroundColor(Color.WHITE); 
     setDraggedItemPosition(mTouchDownX, mTouchDownY); 
     animateDragged(); 
    } 

    return true; 
} 
+1

que vous avez déjà essayé? S'il vous plaît ajouter un code lié à la question. –

+0

@SankarV J'ai essayé de définir la frontière à l'imageview quand il a longtemps appuyé.Mais je ne sais pas comment supprimer la bordure lors de la libération – Krishna

+1

mettre à jour votre question avec le code –

Répondre

1

Vous pouvez ajouter une bordure blanche d'épaisseur 2 tout autour d'un ImageView via un OnLongClickListener comme suit:

imageView.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
       imageView.setPadding(2, 2, 2, 2); 
       imageView.setBackgroundColor(Color.WHITE); 
      return true; 
     } 
    }); 

Vous pouvez le faire via un OnTouchListener ainsi:

imageView.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch(event){ 
      case MotionEvent.ACTION_DOWN: 
       imageView.setPadding(2, 2, 2, 2); 
       break; 
      case MotionEvent.ACTION_UP: 
       imageView.setPadding(0, 0, 0, 0); 
       break; 
      } 
      return false; 
    } 

Vous pouvez potentiellement combiner les deux pour définir le remplissage dans le OnLongClickListener et supprimer le remplissage dans le MotionEvent.ACTION_UP cation du OnTouchListener.

+0

@ biddulph.r J'ai essayé avec l'aide de votre réponse de réglage l'arrière-plan fonctionne bien mais il ne se cache pas lorsque la version – Krishna

+0

essayez de définir la couleur d'arrière-plan pour être transparent, puis déclencher un redessin de l'ImageView –

0

Pour supprimer l'arrière-plan. utilisez setbackground (null) ou peut-être setbackground (Color.Transparent). :)

Questions connexes