/** @param canvas */ private void drawAircraft(Canvas canvas) { mPaint.setShadowLayer(0, 0, 0, 0); mPaint.setColor(Color.WHITE); if (null != mAirplaneBitmap) { /* * Rotate and move to a panned location */ mAirplaneBitmap .getTransform() .setRotate( (float) mGpsParams.getBearing(), mAirplaneBitmap.getWidth() / 2.f, mAirplaneBitmap.getHeight() / 2.f); mAirplaneBitmap .getTransform() .postTranslate( getWidth() / 2.f - mAirplaneBitmap.getWidth() / 2.f + mPan.getMoveX() * mScale.getScaleFactor(), getHeight() / 2.f - mAirplaneBitmap.getHeight() / 2.f + mPan.getMoveY() * mScale.getScaleCorrected()); canvas.drawBitmap(mAirplaneBitmap.getBitmap(), mAirplaneBitmap.getTransform(), mPaint); } }
/** @param canvas */ private void drawTiles(Canvas canvas) { mPaint.setShadowLayer(0, 0, 0, 0); if (null != mTiles) { for (int tilen = 0; tilen < mTiles.getTilesNum(); tilen++) { BitmapHolder tile = mTiles.getTile(tilen); /* * Scale, then move under the plane which is at center */ boolean nochart = false; if (null == tile) { nochart = true; } else if (null == tile.getBitmap()) { nochart = true; } if (nochart) { continue; } /* * Pretty straightforward. Pan and draw individual tiles. */ tile.getTransform().setScale(mScale.getScaleFactor(), mScale.getScaleCorrected()); tile.getTransform() .postTranslate( getWidth() / 2.f - BitmapHolder.WIDTH / 2.f * mScale.getScaleFactor() + ((tilen % mTiles.getXTilesNum()) * BitmapHolder.WIDTH - BitmapHolder.WIDTH * (int) (mTiles.getXTilesNum() / 2)) * mScale.getScaleFactor() + mPan.getMoveX() * mScale.getScaleFactor() + mPan.getTileMoveX() * BitmapHolder.WIDTH * mScale.getScaleFactor() - (float) mMovement.getOffsetLongitude() * mScale.getScaleFactor(), getHeight() / 2.f - BitmapHolder.HEIGHT / 2.f * mScale.getScaleCorrected() + mPan.getMoveY() * mScale.getScaleCorrected() + ((tilen / mTiles.getXTilesNum()) * BitmapHolder.HEIGHT - BitmapHolder.HEIGHT * (int) (mTiles.getYTilesNum() / 2)) * mScale.getScaleCorrected() + mPan.getTileMoveY() * BitmapHolder.HEIGHT * mScale.getScaleCorrected() - (float) mMovement.getOffsetLatitude() * mScale.getScaleCorrected()); Bitmap b = tile.getBitmap(); if (null != b) { canvas.drawBitmap(b, tile.getTransform(), mPaint); } } } }
/* (non-Javadoc) * @see com.ds.avare.MultiTouchController.MultiTouchObjectCanvas#setPositionAndScale(java.lang.Object, com.ds.avare.MultiTouchController.PositionAndScale, com.ds.avare.MultiTouchController.PointInfo) */ public boolean setPositionAndScale( Object obj, PositionAndScale newObjPosAndScale, PointInfo touchPoint) { touchPointChanged(touchPoint); if (false == mCurrTouchPoint.isMultiTouch()) { /* * Multi-touch is zoom, single touch is pan */ if (mPan.setMove(newObjPosAndScale.getXOff(), newObjPosAndScale.getYOff())) { /* * Query when we have moved one tile. This will happen in background. */ dbquery(true); } } else { /* * Clamp scaling. */ mPoint = null; /* this is to not support mPoint distance when zooming */ mScale.setScaleFactor(newObjPosAndScale.getScale()); } tfrReset(); invalidate(); return true; }
/* (non-Javadoc) * @see com.ds.avare.MultiTouchController.MultiTouchObjectCanvas#getPositionAndScale(java.lang.Object, com.ds.avare.MultiTouchController.PositionAndScale) */ public void getPositionAndScale(Object obj, PositionAndScale objPosAndScaleOut) { objPosAndScaleOut.set( mPan.getMoveX(), mPan.getMoveY(), true, mScale.getScaleFactor(), false, 0, 0, false, 0); }