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

Я пытаюсь сделать образец масштабирования. Но это не работает. Я думаю, что проблема в том, что класс активности не может идентифицировать элементы в XML-файле.

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

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

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-файл/////////////////////// //////////////////////////

  <?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>

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


person TRS    schedule 13.12.2011    source источник


Ответы (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);
    }

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

person Kannan Suresh    schedule 13.12.2011
comment
Спасибо за ваши коды. Но это дает java.lang.RuntimeException: java.lang.NullPointerException. - person TRS; 13.12.2011
comment
Мой xml-файл: - ‹?xml version=1.0 encoding=utf-8?› ‹LinearLayout xmlns:android=schemas.android.com/apk/res/android android:layout_width=match_parent android:layout_height=match_parent android:orientation=vertical › ‹ImageView android:id=@+id/sampleImageView android:layout_width=wrap_content android :layout_height=wrap_content /› ‹/LinearLayout› - person TRS; 13.12.2011
comment
sampleImageView = (ImageView) findViewById(R.id.sampleImageView); отсутствовал в коде. Я отредактировал код. Пожалуйста, проверьте. - person Kannan Suresh; 13.12.2011
comment
привет, Спасибо за ваш код. Itz работает. Я хочу использовать эту функцию масштабирования для просмотра в Интернете. Как я могу это сделать..? Я пытаюсь изменить это. Но view.setScaleType(ImageView.ScaleType.MATRIX); не работает для веб-просмотров. Можете ли вы помочь мне исправить это .. - person TRS; 06.01.2012