2010-06-04 6 views

Répondre

2

Utilisez onTouchEvent, recherchez DOWN et déplacer des événements pour dessiner correctement la sélection.

Pour faire un simulateur multitouch: Alt + T, puis utilisez le bouton gauche de la souris pour le doigt 1 et le bouton droit de la souris pour le doigt 2.

Exemple de code

:

class Scr extends MainScreen { 

    XYPoint mLeftUp = null; 
    XYPoint mRightBottom = null; 
    XYPoint mCoursor = null; 
    // Bitmap bitmap = Bitmap.getBitmapResource("wallpaper_bold.jpg"); 
    Bitmap bitmap = Bitmap.getBitmapResource("wallpaper_storm.jpg"); 
    BitmapField mBitmapField = new BitmapField(bitmap); 

    public Scr() { 
     add(mBitmapField); 
     mCoursor = new XYPoint(bitmap.getWidth() >> 1, 
       bitmap.getHeight() >> 1); 
    } 

    protected void makeMenu(Menu menu, int instance) { 
     super.makeMenu(menu, instance); 
     if (mLeftUp != null && mRightBottom != null) { 
      menu.add(new MenuItem("crop", 0, 0) { 
       public void run() { 
        XYRect rect = null; 
        if (mLeftUp.x > mRightBottom.x 
          && mLeftUp.y > mRightBottom.y) { 
         rect = new XYRect(mRightBottom, mLeftUp); 
        } else { 
         rect = new XYRect(mLeftUp, mRightBottom); 
        } 
        Bitmap crop = cropImage(bitmap, rect.x, rect.y, 
          rect.width, rect.height); 
        mBitmapField.setBitmap(crop); 
        mCoursor = new XYPoint(crop.getWidth() >> 1, crop 
          .getHeight() >> 1); 
        mLeftUp = null; 
        mRightBottom = null; 
        invalidate(); 
       } 
      }); 

      menu.add(new MenuItem("reset", 0, 0) { 
       public void run() { 
        mBitmapField.setBitmap(bitmap); 
        mCoursor = new XYPoint(bitmap.getWidth() >> 1, bitmap 
          .getHeight() >> 1); 
        invalidate(); 
       } 
      }); 
     } 
    } 

    protected void paint(Graphics graphics) { 
     super.paint(graphics); 
     if (mCoursor != null) { 
      graphics.setColor(Color.RED); 
      graphics.drawLine(mCoursor.x - 4, mCoursor.y - 4, 
        mCoursor.x + 4, mCoursor.y + 4); 
      graphics.drawLine(mCoursor.x + 4, mCoursor.y - 4, 
        mCoursor.x - 4, mCoursor.y + 4); 
     } 
     if (mLeftUp != null && mRightBottom != null) { 
      graphics.setColor(Color.RED); 
      graphics.drawPoint(mLeftUp.x, mLeftUp.y); 
      graphics.drawPoint(mRightBottom.x, mRightBottom.y); 
      graphics.drawPoint(mLeftUp.x, mRightBottom.y); 
      graphics.drawPoint(mRightBottom.x, mLeftUp.y); 
      graphics.setColor(Color.WHITESMOKE); 
      XYRect redRect = null; 
      if (mLeftUp.x > mRightBottom.x && mLeftUp.y > mRightBottom.y) { 
       redRect = new XYRect(mRightBottom, mLeftUp); 
      } else { 
       redRect = new XYRect(mLeftUp, mRightBottom); 
      } 
      graphics.drawRect(redRect.x, redRect.y, redRect.width, 
        redRect.height); 
     } 
    } 

    // comment block for Bold 
    protected boolean touchEvent(TouchEvent message) { 
     int x1 = message.getX(1); 
     int y1 = message.getY(1); 
     int x2 = message.getX(2); 
     int y2 = message.getY(2); 
     switch (message.getEvent()) { 
     case TouchEvent.DOWN: 
      if (x1 != -1) { 
       mLeftUp = new XYPoint(x1, y1); 
      } else if (x2 != -1) { 
       mRightBottom = new XYPoint(x2, y2); 
      } 
      break; 
     case TouchEvent.MOVE: 
      if (x1 != -1) { 
       mLeftUp = new XYPoint(x1, y1); 
      } 
      if (x2 != -1) { 
       mRightBottom = new XYPoint(x2, y2); 
      } 
      break; 
     case TouchEvent.UNCLICK: 
      mLeftUp = null; 
      mRightBottom = null; 
     default: 
      break; 
     } 
     invalidate(); 
     return true; 
    } 

    protected boolean navigationMovement(int dx, int dy, int status, 
      int time) { 
     moveCoursor(dx, dy); 
     return true; 
    } 

    private void moveCoursor(int dx, int dy) { 
     mCoursor.translate(dx, dy); 
     if (mLeftUp != null) { 
      mRightBottom = new XYPoint(mCoursor); 
     } 
     invalidate(); 
    } 

    protected boolean navigationUnclick(int status, int time) { 
     clickCoursor(); 
     return true; 
    } 

    private void clickCoursor() { 
     if (mLeftUp != null && mLeftUp.equals(mCoursor)) { 
      mLeftUp = null; 
      mRightBottom = null; 
     } else { 
      mLeftUp = new XYPoint(mCoursor); 
     } 
     invalidate(); 
    } 

    public static Bitmap cropImage(Bitmap image, int x, int y, int width, 
      int height) { 
     Bitmap result = new Bitmap(width, height); 
     Graphics g = Graphics.create(result); 
     g.drawBitmap(0, 0, width, height, image, x, y); 
     return result; 
    } 
} 
+0

Hey Merci homme c'est le code qui Je voulais .. merci beaucoup – rupesh

+0

Vous êtes les bienvenus :) –

Questions connexes