1

特定の URL から画像をロードできる画像ビューアーを作成しようとしています。以下のコードは、ユーザー インターフェイスを実装しています。

私の意図は、ユーザーが画像をズームして、スワイプイベントで次の画像に移動できるようにすることです.しかし、問題は、ズームしてからスワイプすると、残りの部分を表示するのではなく、次の画像に移動することです.

ここに画像の説明を入力

TouchImageView の ( https://github.com/MikeOrtiz/TouchImageView ) onTouchListener で requestDisallowInterceptTouchEvent を使用してみました。この後、残りの部分は表示できましたが、次のページに移動できません。イベントは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;
    }

}

}

4

1 に答える 1