Проблемы - увеличение масштаба

Я пытаюсь сделать pinch zoom sample.but itz не работает. Я думаю, что проблема в том, что класс активности не может идентифицировать элементы в XML-файле.

ОШИБКА Описание mapview не может быть разрешено или не является полем.

Мой код, как показано ниже

package pinchZoom.com;
import android.R;
import android.os.Bundle;
import com.google.android.maps.MapActivity;
import com.nikkoaiello.mobile.android.PinchMapView;

public class PinchZoomActivity extends MapActivity
{

PinchMapView view;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapview);
    view = (PinchMapView) findViewById(R.id.Map);
}

protected boolean isRouteDisplayed() {
    return false;
}

////////////////////////// xml file //////////////////////// /////////////////////////

  <?xml version="1.0" encoding="utf-8"?>

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:isScrollContainer="true"

    >

   <com.nikkoaiello.mobile.android.PinchMapView

        android:id="@+id/Map"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:clickable="true"

        android:apiKey="***MY API KEY***"

   />


   </RelativeLayout>

Может кто-нибудь сказать, пожалуйста, как это исправить? Если бы вы работали с примерами, это была бы реальная помощь!

1 ответ

Решение
// These matrices will be used to scale points of the image
    Matrix matrix = new Matrix();
    Matrix savedMatrix = new Matrix();

    // The 3 states (events) which the user is trying to perform
    static final int NONE = 0;
    static final int DRAG = 1;
    static final int ZOOM = 2;
    int mode = NONE;

    // these PointF objects are used to record the point(s) the user is touching
    PointF start = new PointF();
    PointF mid = new PointF();
    float oldDist = 1f;

    ImageView sampleImageView;

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sample);

     sampleImageView = (ImageView) findViewById(R.id.sampleImageView);

    sampleImageView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
        ImageView view = (ImageView) v;
              view.setScaleType(ImageView.ScaleType.MATRIX);

        // Handle touch events here...
        switch (event.getAction() & MotionEvent.ACTION_MASK) {

        case MotionEvent.ACTION_DOWN:
            savedMatrix.set(matrix);
            start.set(event.getX(), event.getY());
            mode = DRAG;

            break;

        case MotionEvent.ACTION_POINTER_DOWN:
            oldDist = spacing(event);

            if (oldDist > 10f) {
            savedMatrix.set(matrix);
            midPoint(mid, event);
            mode = ZOOM;
            }

            break;

        case MotionEvent.ACTION_UP:

        case MotionEvent.ACTION_POINTER_UP:
            mode = NONE;

            break;

        case MotionEvent.ACTION_MOVE:
            if (mode == DRAG) {
            // ...
            matrix.set(savedMatrix);

            float postTranslateX = event.getX() - start.x;
            float postTranslateY = event.getY() - start.y;

            matrix.postTranslate(postTranslateX, postTranslateY);

            } else if (mode == ZOOM) {
            float newDist = spacing(event);

            if (newDist > 10f) {
                matrix.set(savedMatrix);
                float scale = newDist / oldDist;
                matrix.postScale(scale, scale, mid.x, mid.y);
            }
            }

            break;
        }

        view.setImageMatrix(matrix);

        return true; // indicate event was handled

        }
    });
    }

    /**
     * Checks the spacing between the two fingers on touch.
     * 
     * @param event
     *            the MotionEvent
     * @return float
     */
    private float spacing(MotionEvent event) {
       float x = event.getX(0) - event.getX(1);
       float y = event.getY(0) - event.getY(1);

       return FloatMath.sqrt(x * x + y * y);
    }

    /**
     * Calculates the midpoint between the two fingers.
     * 
     * @param point
     *            the PointF object,
     * @param event
     *            the MotionEvent
     */
    private void midPoint(PointF point, MotionEvent event) {
       float x = event.getX(0) + event.getX(1);
       float y = event.getY(0) + event.getY(1);
       point.set(x / 2, y / 2);
    }

Пожалуйста, попробуйте это.

Другие вопросы по тегам