2012-02-23 17 views
1

ビットマップのサイズが画面(例:1000x1000)より大きくなっています。私はこのビットマップをキャンバスにドラッグすることができます。私がポイント(500,500)getXまたはgetYで0から320 [画面サイズエミュレータ]の間で500の値を返さない場合、ポイント0に関して絶対値を知る必要があります。絶対座標ビットマップandroid

ビットマップ0左よりと見るの0トップポイントを翻訳し、私は次の方法

@Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     // Let the ScaleGestureDetector inspect all events. 
     mScaleDetector.onTouchEvent(ev); 


     final int action = ev.getAction(); 
     switch (action & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: { 
      startTime = ev.getEventTime(); 
      final float x = ev.getX(); 
      final float y = ev.getY(); 
      final float xR= ev.getRawX(); 
      final float yR= ev.getRawY(); 
      movido=false; 
      mLastTouchX = x; 
      mLastTouchY = y; 
      mLastTouchXRaw = xR; 
      mLastTouchYRaw = yR; 

      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; 

       movido=true; 
       invalidate(); 
      } 

      mLastTouchX = x; 
      mLastTouchY = y; 
      movido=true; 


      break; 
     } 

     case MotionEvent.ACTION_UP: { 
      mActivePointerId = INVALID_POINTER_ID; 
      endTime = ev.getEventTime(); 

      if ((endTime - startTime > 500)&&!movido) { 

       // we have a 1000ms duration touch 
       // propagate your own event 
       Log.d("LC", "time touched greater than 1000ms " + endTime + " " 
         + startTime); 

       startTime = 0; 
       endTime = 0; 
       movido=false; 
       Box pepeBox=new Box(); 
       pepeBox=buscarElemento(); 
       //Intent intent=new Intent(mContext,OpcionesConceptoList.class); 
       //mContext.startActivity(intent); 
       /* 
       * return true; notify that you handled this event (do not 
       * propagate) 
       */ 
      } 
      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; 
    } 

との位置に任意のアドバイスを得る質問

public MapaView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); 
    mSurfaceHeight = 640; 
    mSurfaceWidth = 480; 
    mapaActual = new Mapa(); 
    mContext = context; 
    mBufferedCanvas = new Canvas(); 

} 


    draw(Canvas c){ 

    bitmapAux.eraseColor(Color.WHITE); 

    /*draw the rectangles....*/ 

    c.translate(mPosX, mPosY); 
    c.scale(mScaleFactor, mScaleFactor); 
    c.drawBitmap(bitmapAux, 0, 0, null);} 

を明確にするためにいくつかのコードを入れて?

ありがとうございます。私の英語をお待ちしております。

答えて

1

getRawX()とgetRawY():

のgetX(携帯電話の画面に座標(X、Y)の相対を返す)とのgetY()へcoordiantesを返す(X、Y)の相対表示します。

実際に絶対座標は何ですか?

+0

おかげで、あなたの質問を理解している場合。 私は位置(900,900)に矩形を描くと移動しなければならないので、ビットマップの絶対座標が必要です。これは私がcanvas.translate(mPosX、mPosY)を使用するためです ありがとう – user727763

0

私は、あなたがすぐに答えるため

// 
Bitmap bitmap; 
// 
// 
double bitmapRatio = ((double)bitmap.getWidth())/bitmap.getHeight() 

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
double screenHeight = metrics.heightPixels; 
double screenWidth = metrics.widthPixels; 

double screenRatio= screenWidth /screenHeight; 

if(bitmapRatio > screenRatio){ 

}else{ 

} 
関連する問題