2012-02-23 6 views
1

화면 (예 : 1000x1000)보다 큰 비트 맵이 있습니다. 캔버스 덕분에이 비트 맵을 끌 수 있습니다. 내가 (500,500) getX 또는 getY이면 0과 320 [화면 크기 에뮬레이터] 사이에 500을 반환하지 않으므로 0 점을 기준으로 절대 값을 알아야합니다. 내가절대 좌표 비트 맵 android

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

내가 다음 방법

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

어떤 조언과 위치를 얻을 질문을 명확히하기 위해 몇 가지 코드를 넣어 0 왼쪽과보기

0 최고 포인트보다 비트 맵 더 번역 ?

미리 감사드립니다. 제 영어를 실례합니다.

답변

1

getRawX() 및 getRawY() : 전화

getX()와 getY()의 스크린 좌표 (X, Y) 상대적으로 돌아가 다음에 (X, Y)의 상대를 coordiantes를 반환 전망.

실제 절대 좌표는 무엇입니까? 빨리 대답을

나는 당신의 질문을 이해하면
+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{ 

}