Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否在ViewPager内对ImageView进行收缩缩放?onTouch事件不起作用?_Java_Android_Android Layout - Fatal编程技术网

Java 是否在ViewPager内对ImageView进行收缩缩放?onTouch事件不起作用?

Java 是否在ViewPager内对ImageView进行收缩缩放?onTouch事件不起作用?,java,android,android-layout,Java,Android,Android Layout,我在stack overflow中浏览了很多帖子,但没有找到可能的解决方案 package com.sourcebits.gallerygestures; import android.app.Activity; import android.graphics.Matrix; import android.graphics.PointF; import android.os.Bundle; import android.support.v4.view.P

我在stack overflow中浏览了很多帖子,但没有找到可能的解决方案

package com.sourcebits.gallerygestures;

    import android.app.Activity;
    import android.graphics.Matrix;
    import android.graphics.PointF;
    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.util.FloatMath;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.ImageView;

    /**
     * 
     * @author Rajeev N B
     * 
     */

    public class GalleryActivity extends Activity implements OnTouchListener {

        /**
         * Activity Context
         */
        private GalleryActivity context;

        /**
         * List of drawables
         */
        private int[] mImages = new int[6];

        /**
         * ViewPager for displaying images
         */
        private ViewPager viewPager;

        /**
         * Matrices used for Pinch and Zoom
         */
        Matrix matrix = new Matrix();
        Matrix savedMatrix = new Matrix();

        // We can be in one of these 3 states
        static final int NONE = 0;
        static final int ZOOM = 2;
        int mode = NONE;

        // Remember some things for zooming
        PointF start = new PointF();
        PointF mid = new PointF();
        float oldDist = 1f;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_gallery);
            context = GalleryActivity.this;
            viewPager = (ViewPager) findViewById(R.id.pager);
            ImagePagerAdapter adapter = new ImagePagerAdapter();
            viewPager.setAdapter(adapter);
        }

        /**
         * 
         * @author Rajeev N B Adapter for displaying the images
         * 
         */
        private class ImagePagerAdapter extends PagerAdapter {
            private int[] mImages = { R.drawable.background, R.drawable.koskula,
                    R.drawable.wallpaper, R.drawable.wallpap, R.drawable.gr,
                    R.drawable.balck };
            private int pos;
            private ImageView imageView;

            /**
             * Default Constructor
             */
            public ImagePagerAdapter() {

            }

            /**
             * Get the Count of the Pages for the View Pager
             */
            @Override
            public int getCount() {
                return mImages.length;
            }

            /**
             * Get the View from the Object
             */
            @Override
            public boolean isViewFromObject(View view, Object object) {
                pos = viewPager.getCurrentItem();
                return view == ((ImageView) object);
            }

            /**
             * Create a new Item in the viewPager
             */
            @Override
            public Object instantiateItem(ViewGroup container, final int position) {
                Button prev = (Button) findViewById(R.id.button1);
                Button next = (Button) findViewById(R.id.button2);

                next.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {
                        if (pos < mImages.length)
                            viewPager.setCurrentItem(pos + 1);
                        Log.v("Next", "" + pos);
                    }
                });

                prev.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {
                        if (pos > 0)
                            viewPager.setCurrentItem(pos - 1);
                        Log.v("Next", "" + pos);
                    }
                });

                imageView = new ImageView(context);
                int padding = context.getResources().getDimensionPixelSize(
                        R.dimen.padding_medium);
                imageView.setPadding(padding, padding, padding, padding);
                imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
                imageView.setImageResource(mImages[position]);
                ((ViewPager) container).addView(imageView, 0);
                imageView.setOnTouchListener(context);
                return imageView;
            }

            /**
             * Destroy the Items
             */
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                ((ViewPager) container).removeView((ImageView) object);
            }

        }

        /**
         * Pinch to zoom Functionality
         */
        public boolean onTouch(View v, MotionEvent event) {
            ImageView view = (ImageView) v;
            // Handle touch events here...
            switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                savedMatrix.set(matrix);
                start.set(event.getX(), event.getY());
                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 == 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
        }

        /** Determine the space between the first two fingers */
        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);
        }

        /** Calculate the mid point of the first two fingers */
        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);
        }
    }
package com.sourcebits.gallerybits;
导入android.app.Activity;
导入android.graphics.Matrix;
导入android.graphics.PointF;
导入android.os.Bundle;
导入android.support.v4.view.PagerAdapter;
导入android.support.v4.view.ViewPager;
导入android.util.FloatMath;
导入android.util.Log;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.view.OnTouchListener;
导入android.view.ViewGroup;
导入android.widget.Button;
导入android.widget.ImageView;
/**
* 
*@作者Rajeev N B
* 
*/
公共类GalleryActivity将活动实现扩展到TouchListener{
/**
*活动上下文
*/
私人厨房活动环境;
/**
*提款单
*/
私有int[]mImages=新int[6];
/**
*用于显示图像的ViewPager
*/
私人视页机视页机;
/**
*用于收缩和缩放的矩阵
*/
矩阵=新矩阵();
矩阵savedMatrix=新矩阵();
//我们可能处于这三种状态之一
静态最终int NONE=0;
静态最终整数缩放=2;
int模式=无;
//记住一些关于缩放的事情
PointF start=新的PointF();
PointF mid=新的PointF();
浮动oldDist=1f;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
上下文=GalleryActivity.this;
viewPager=(viewPager)findViewById(R.id.pager);
ImagePagerAdapter适配器=新的ImagePagerAdapter();
viewPager.setAdapter(适配器);
}
/**
* 
*@author Rajeev N B用于显示图像的适配器
* 
*/
私有类ImagePagerAdapter扩展了PagerAdapter{
private int[]mImages={R.drawable.background,R.drawable.koskula,
R.drawable.wallpap,R.drawable.gr,
R.drawable.balck};
私人国际邮政局;
私人影像视图;
/**
*默认构造函数
*/
公共图像页雷达(){
}
/**
*获取查看寻呼机的页数
*/
@凌驾
public int getCount(){
返回图像长度;
}
/**
*从对象获取视图
*/
@凌驾
公共布尔值isViewFromObject(视图,对象){
pos=viewPager.getCurrentItem();
返回视图==((图像视图)对象);
}
/**
*在viewPager中创建新项目
*/
@凌驾
公共对象实例化项(视图组容器,最终int位置){
按钮prev=(按钮)findViewById(R.id.button1);
按钮下一步=(按钮)findViewById(R.id.button2);
next.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
如果(位置<图像长度)
viewPager.setCurrentItem(位置+1);
Log.v(“下一个“,”+pos);
}
});
prev.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
如果(位置>0)
viewPager.setCurrentItem(位置-1);
Log.v(“下一个“,”+pos);
}
});
imageView=新的imageView(上下文);
int padding=context.getResources().getDimensionPixelSize(
R.二聚体(培养基);
setPadding(padding,padding,padding,padding);
imageView.setScaleType(imageView.ScaleType.CENTER_内);
setImageResource(mImages[position]);
((ViewPager)容器).addView(imageView,0);
setOnTouchListener(上下文);
返回图像视图;
}
/**
*销毁物品
*/
@凌驾
公共项(视图组容器、int位置、对象){
((ViewPager)容器)。移除视图((ImageView)对象);
}
}
/**
*收缩缩放功能
*/
公共布尔onTouch(视图v,运动事件){
ImageView视图=(ImageView)v;
//在这里处理触摸事件。。。
开关(event.getAction()&MotionEvent.ACTION\u掩码){
case MotionEvent.ACTION\u DOWN:
savedMatrix.set(矩阵);
set(event.getX(),event.getY());
打破
case MotionEvent.ACTION\u指针\u向下:
oldDist=间距(事件);
如果(旧区>10f){
savedMatrix.set(矩阵);
中点(中点,事件);
模式=缩放;
}
打破
case MotionEvent.ACTION\u UP:
case MotionEvent.ACTION\u指针\u向上:
模式=无;
打破
case MotionEvent.ACTION\u移动:
如果(模式==缩放){
float newDist=间距(事件);
如果(新距离>10f){
矩阵集(savedMatrix);
浮动比例=新距离/旧距离;