1

私はアンドロイドに関数を入れたいです。私は多くの方法を試していますがzoom in、うまくいきません。Androidでの画像の別のチュートリアルを見つけましたが、試しても機能しませんこの機能を実装する方法を教えてもらえますか?チュートリアルでコードが機能しないのはなぜですか?zoom outGalleryViewzoom inZoom outGalleryView

私は以下のリンクでこのチュートリアルを試しています:

http://blog.projapps.com/?p=85

以下のコードのように:

MyImageview.java

import android.content.Context;
import android.graphics.Matrix;
import android.view.MotionEvent;
import android.widget.ImageView;

public class MyImageView extends ImageView {
    public MyImageView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    boolean isDraggable = false;
    boolean isRight = false;
    boolean isLeft = false;

    // These matrices will be used to move and zoom image
    Matrix matrix = new Matrix();
    Matrix savedMatrix = new Matrix();

    public void setMatrix(Matrix m) {
        matrix.set(m);
    }

    public void setSavedMatrix(Matrix m) {
        savedMatrix.set(m);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (isDraggable) {
            // place pan/zoom codes here
        }
        return true;
    }
}

MyGallery.java

public class MyGallery extends Gallery {
    private PointF m_start = new PointF();
    private MyImageView imageView;

    public MyGallery(Context context) {
        super(context);
    }

    public MyGallery(Context context, AttributeSet attrSet) {
        super(context, attrSet);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        imageView = (MyImageView) getSelectedView();
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                m_start.set(event.getX(), event.getY());
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                imageView.isDraggable = true;
                if (imageView.getScaleType() != ImageView.ScaleType.MATRIX) {
                    imageView.setMatrix(imageView.getImageMatrix());
                    imageView.setScaleType(ImageView.ScaleType.MATRIX);
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if ((event.getX() - m_start.x < 0 && imageView.isRight) ||
                    (event.getX() - m_start.x > 0 && imageView.isLeft))
                    imageView.isDraggable = false;
                break;
        }
        if (!imageView.isDraggable) {
            onTouchEvent(event);
        }
        return super.onInterceptTouchEvent(event);
    }
}

そして私は以下のコードのようなイメージアダプタクラスをロードしています:

public class ImageAdapter extends BaseAdapter {

        public ImageAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            return mImageIds.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            MyImageView i = new MyImageView(mContext);
            i.setImageResource(mImageIds[position]);
            i.setScaleType(ImageView.ScaleType.FIT_XY);
            return i;            
        }

        private Context mContext;

    }

以下のコードのように、ギャラリークラスに画像アダプタをロードします。

    g = (MyGallery) findViewById(R.id.gallery);
    g.setSpacing(60);
    g.setUnselectedAlpha(1);
    g.setAdapter(new ImageAdapter(this));

このコードは画像を正常にロードしますが、ズーム機能は動作しません!

4

0 に答える 0