我正在关注 android 开发人员文档中的BitMapFun教程。因为我通常是 Android/Java 编程的新手。
我创建了一个自定义 ImageViewer(称为TouchImageView),它允许用户缩放、双击等......并将其应用于ImageDetailFragment类。
在TouchImageView类中,我有一个布尔变量,可以检测用户是否放大,如果它是 zoomedIn,它也会标记图像是否位于边框侧。(因此 zoomedIn 位和屏幕边框很重要)
我想应用此逻辑来启用或禁用 ViewPager 以允许用户滚动到下一页/上一页(读取 Fragment)此 ViewPager 位于实现FragmentActivity的ImageDetailActivity
正如我现在的代码一样,如果我向左或向右移动(在放大状态下)而不是移动图像,它将转到下一个片段而不是向左或向右滚动。除非我首先向上或向下移动,否则我可以滚动图像。
所以我想,如果我在 Fragment 中有一个布尔值,我可以检查它以便我的 Activiy 启用/禁用 ViewPager,那么我可以“控制”滚动的工作方式。
这个逻辑正确吗?如果是这样,我如何从我的 DetailActivity 类中的 Fragment 中检索布尔值。我已经尝试使用接口来执行此操作,但是我总是得到一个错误的回复(由于 onCreate 期间片段的初始化?)所以我需要一些可以在显示片段的运行时检索该布尔值的东西。但是从我下面的代码中它永远不会工作。
public void onCreate(Bundle savedInstanceState) {
.... Do stuff like fetching images and caching etc ....
mPager = (ScrollViewPager) findViewById(R.id.pager);
mAdapter = new ImagePagerAdapter(getSupportFragmentManager(), imgs.getImagesLocal().length);
mPager.setAdapter(mAdapter);
mPager.setPageMargin((int) getResources().getDimension(R.dimen.image_detail_pager_margin));
mPager.setOffscreenPageLimit(2);
mPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//v.mAdapter.mCurItem
ScrollViewPager scroll = (ScrollViewPager) v;
//Log.d(TAG, "-----------------Current pos is "+ scroll.getCurrentItem());
ImageDetailFragment frag = (ImageDetailFragment) mAdapter.getItem(scroll.getCurrentItem());
if(frag.isPageChangeable())
{
Log.d(TAG, "-----------------Page is zoomed");
}else
{
Log.d(TAG, "----------------------Page is not Zoomed");
}
return false;
}
});
}
我得到的片段初始化是。
/**
* The main adapter that backs the ViewPager. A subclass of FragmentStatePagerAdapter as there could be a large number of items in the ViewPager and we don't want to retain
* them all in memory at once but create/destroy them on the fly.
*/
private class ImagePagerAdapter extends FragmentStatePagerAdapter {
private final int mSize;
public ImagePagerAdapter(FragmentManager fm, int size) {
super(fm);
mSize = size;
}
@Override
public int getCount() {
return mSize;
}
@Override
public Fragment getItem(int position) {
return ImageDetailFragment.newInstance(imgs.getImagesLocal()[position], position, imgs.getImagesLocal().length);
}
}
如果您想查看完整代码,可以在此处下载。
为了防止滑动/甩动,我想使用在此stackoverflow 帖子中找到的以下信息