2012-06-23 21 views
6

Resimde sürükleme kullanan bir uygulama üzerinde çalışıyorum & drop on Images Göreceli düzende herhangi bir sayıda resim ekleyebilir miyim? Resimleri sürükleyebiliyorum, ancak her seferinde bir tane. Yeni görüntü ekledikten sonra, önceki tüm resimler dokunulamaz. Bu yeni bir resim eklediğim kod bu koddur. Ivtest global bir resimdir. o "kapsar" düzeninde tüm diğer görünümler, çünkü LayoutParams tanımlarkenBirden çok görüntüyü sürükleyin çalışmıyor

public class TestImage extends View implements OnTouchListener 
{ 
private ScaleGestureDetector mScaleDetector; 
private float mScaleFactor = 1.f; 
private Drawable mIcon; 
private float mLastTouchX; 
private static final int INVALID_POINTER_ID = -1; 

// The ‘active pointer’ is the one currently moving our object. 
private int mActivePointerId = INVALID_POINTER_ID; 
private float mPosX; 
    private float mPosY; 

    private float mLastTouchY; 


public TestImage(Context context, Drawable _micon) 
{ 
    super(context); 
    mIcon =_micon; 
    WindowManager wManager= (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); 
    mIcon.setBounds((int)getPivotX(), (int)getPivotY(), mIcon.getIntrinsicWidth(),mIcon.getIntrinsicWidth()); 

// setOnTouchListener(this); 

    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); 

} 

@Override 
public boolean onTouch(View view, MotionEvent ev) 
{ 

     mScaleDetector.onTouchEvent(ev); 

     final int action = ev.getAction(); 
     switch (action & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
     { 
      final float x = ev.getX(); 
      final float y = ev.getY(); 


      mLastTouchX = x; 
      mLastTouchY = y; 
      mActivePointerId = ev.getPointerId(0); 
      break; 
     } 

     case MotionEvent.ACTION_MOVE: { 
      final int pointerIndex = ev.findPointerIndex(mActivePointerId); 
      final float x = ev.getX(pointerIndex); 
      final float y = ev.getY(pointerIndex); 

      // Only move if the ScaleGestureDetector isn't processing a gesture. 
      if (!mScaleDetector.isInProgress()) { 
       final float dx = x - mLastTouchX; 
       final float dy = y - mLastTouchY; 

       mPosX += dx; 
       mPosY += dy; 

       invalidate(); 
      } 

      mLastTouchX = x; 
      mLastTouchY = y; 

      break; 
     } 

     case MotionEvent.ACTION_UP: { 
      mActivePointerId = INVALID_POINTER_ID; 
      break; 
     } 

     case MotionEvent.ACTION_CANCEL: { 
      mActivePointerId = INVALID_POINTER_ID; 
      break; 
     } 

     case MotionEvent.ACTION_POINTER_UP: { 
      final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) 
        >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; 
      final int pointerId = ev.getPointerId(pointerIndex); 
      if (pointerId == mActivePointerId) { 
       // This was our active pointer going up. Choose a new 
       // active pointer and adjust accordingly. 
       final int newPointerIndex = pointerIndex == 0 ? 1 : 0; 
       mLastTouchX = ev.getX(newPointerIndex); 
       mLastTouchY = ev.getY(newPointerIndex); 
       mActivePointerId = ev.getPointerId(newPointerIndex); 
      } 
      break; 
     } 
     } 

     return true; 

} 


@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    canvas.save(); 
    canvas.translate(mPosX, mPosY); 
    canvas.scale(mScaleFactor, mScaleFactor); 
    mIcon.setBounds(0, 0, mIcon.getIntrinsicWidth(),mIcon.getIntrinsicWidth()); 
    mIcon.draw(canvas); 
    canvas.restore(); 
} 

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { 
    @Override 
    public boolean onScale(ScaleGestureDetector detector) { 
     mScaleFactor *= detector.getScaleFactor(); 

     // Don't let the object get too small or too large. 
     mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f)); 

     invalidate(); 
     return true; 
    } 
} 

} enter image description here

+0

yeterli kod yok ..add touchlistener ve UI snapshot .. – Ronnie

+1

@ userSeven7s Kodu düzenledim. Başka bir şey denerken biraz değişiyor. ama çoğu şeyleri kapsamaktadır. – Kamal

+0

@Kamal Lütfen cevabımı inceleyin. –

cevap

0

Sen FILL_PARENT genişlik ve yükseklik kullanmamalısınız. Bunun yerine WRAP_CONTENT kullanın.

+0

Bunu zaten test ettim. hala çalışmıyor. – Kamal

+0

UI ekran görüntüsünü ekleyin lütfen – Jin35

+0

bir ekran görüntüsü ekledim. – Kamal

İlgili konular