Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 如何使用ImageView和PageAdapter滑动缩放的图像_Java_Android - Fatal编程技术网

Java 如何使用ImageView和PageAdapter滑动缩放的图像

Java 如何使用ImageView和PageAdapter滑动缩放的图像,java,android,Java,Android,我正在尝试创建一个图像查看器,它可以从给定的URL加载图像。下面的代码实现了用户界面 我的意图是让用户通过滑动事件缩放图像并移动到下一个图像。但问题是,当我缩放并滑动图像时,它不会显示剩余部分,而是移动到下一个图像 我尝试在TouchImageView的()onTouchListener中使用RequestDisallowWinterCeptTouchEvent。在此之后,剩余部分可以显示,但现在无法转到下一页。我想知道如何实现这一点,因为活动只能转到TouchView或PageAdapter

我正在尝试创建一个图像查看器,它可以从给定的URL加载图像。下面的代码实现了用户界面

我的意图是让用户通过滑动事件缩放图像并移动到下一个图像。但问题是,当我缩放并滑动图像时,它不会显示剩余部分,而是移动到下一个图像

我尝试在TouchImageView的()onTouchListener中使用RequestDisallowWinterCeptTouchEvent。在此之后,剩余部分可以显示,但现在无法转到下一页。我想知道如何实现这一点,因为活动只能转到TouchView或PageAdapter

public class PageActivity extends Activity {
private int numPages = 33;
private TouchImageView[] imageViews = new TouchImageView[numPages];

private String URL = "http://www.smbc-comics.com/comics/200905";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ViewPager viewPager = new ViewPager(this);

    for (int i = 0; i < numPages; i++) {
        imageViews[i] = new TouchImageView(this);
        imageViews[i].setBackgroundResource(R.drawable.banke);
        imageViews[i].setMaxZoom(4f);
    }

    setContentView(viewPager);
    ImagePagerAdapter adapter = new ImagePagerAdapter();
    viewPager.setAdapter(adapter);
    viewPager.setOffscreenPageLimit(2);
}

@SuppressWarnings("unused")
private class ImagePagerAdapter extends PagerAdapter {
    @Override
    public int getCount() {
        return numPages;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((TouchImageView) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Context context = PageActivity.this;

        String pageURL = URL;

        if (imageViews[position].getDrawable() == null) {
          ImageFetcher  imagefetcher = new ImageFetcher();
            imagefetcher.execute(
                    pageURL + String.format("%02d", position+1) + ".gif",
                    String.valueOf(position));
        }


        ((ViewPager) container).addView(imageViews[position], 0);
        return imageViews[position];
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {

        ((ViewPager) container).removeView((TouchImageView) object);
        imageViews[position].setImageDrawable(null);

    }

}
public class ImageFetcher extends AsyncTask<String, Integer, Drawable> {
    int fillthisPos;

    public Drawable doInBackground(String... urls) {
        try {
            InputStream is = (InputStream) new URL(urls[0]).getContent();
            fillthisPos = Integer.parseInt(urls[1]);
            Drawable d = Drawable.createFromStream(is, "src name");
            return d;
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    protected void onPostExecute(Drawable result) {
        super.onPostExecute(result);
        imageViews[fillthisPos].setImageDrawable(result);
        result = null;
    }

}
公共类页面活动扩展活动{
私有整数=33;
私有TouchImageView[]imageViews=新建TouchImageView[numPages];
专用字符串URL=”http://www.smbc-comics.com/comics/200905";
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ViewPager ViewPager=新的ViewPager(此);
对于(int i=0;i

}您可以在TouchImageView类中添加以下代码:

public boolean isZoomed () {
    return (normalizedScale > minScale);
}

private void onSwipeEvent(MotionEvent event) {
    boolean zoomed = this.isZoomed();

    if (!zoomed && (swipeLen > 0)) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            swipeStartPos = (int) event.getRawX();
        }
        else if (event.getAction() == MotionEvent.ACTION_MOVE) {
            int distance = ((int) event.getRawX()) - swipeStartPos;
            int swipeVector = SWIPE_RIGHT;
            if (distance < 0) swipeVector = SWIPE_LEFT;

            if (Math.abs(distance) > swipeLen) {
                onSwipeHandler.onSwipe(swipeVector);

                swipeStartPos = (int) event.getRawX();
                this.setScaleX(1f);
            }
            else {
                int swipeStDist = swipeLen - Math.round(((swipeLen / 100) * 50));
                if (Math.abs(distance) > swipeStDist) {
                    this.setScaleX(0.98f);
                }
            }
        }
        else if (event.getAction() == MotionEvent.ACTION_UP) {
            swipeStartPos = (int) event.getRawX();
            this.setScaleX(1f);
        }
    }
}

public static int SWIPE_LEFT = 0;
public static int SWIPE_RIGHT = 1;
    public int swipeStartPos = 0;
public onSwipeListener onSwipeHandler = new onSwipeListener() {
    public void onSwipe(int vector) {}
};
public static int swipeLen = 0;

public void setOnSwipeListener(onSwipeListener c, int swipeLength) {
    onSwipeHandler = c;
    swipeLen = swipeLength;
}
public interface onSwipeListener {
    public void onSwipe(int vector);
}
在您编写代码之后,您可以添加滑动事件侦听器,如下所示:

imageView.setOnSwipeListener(new TouchImageView.onSwipeListener() {
    @Override
    public void onSwipe(int vector) {
        if (vector == TouchImageView.SWIPE_LEFT) {
            Log.d("swipe", "swipe left!");
        }
        else if (vector == TouchImageView.SWIPE_RIGHT) {
            Log.d("swipe", "swipe right!");
        }
    }
}, 200);  //length of swiping - 200 dip

此onSwipeListener忽略缩放图像的onswipe+。这对我很有用。

如果你不是死心塌地地想自己构建这个库,请查看这个库:据我所知,它提供了一个实现,正好满足了你的需求。
imageView.setOnSwipeListener(new TouchImageView.onSwipeListener() {
    @Override
    public void onSwipe(int vector) {
        if (vector == TouchImageView.SWIPE_LEFT) {
            Log.d("swipe", "swipe left!");
        }
        else if (vector == TouchImageView.SWIPE_RIGHT) {
            Log.d("swipe", "swipe right!");
        }
    }
}, 200);  //length of swiping - 200 dip