在Android中查看寻呼机问题



我使用的是一个viewpage渲染片段一个接一个。我所面临的问题是,一旦我触摸当前片段可见,它需要触摸事件的下一个片段,这是尚未加载。我该如何确保当前/可见片段被触摸&触摸事件被相应地处理。

这是我渲染片段的适配器。

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {
        Log.d("zambob",position+":"+slideShowItems.get(position).name);
        Fragment fragment = new ScreenSlidePageFragment();
        Bundle bundle = new Bundle();
        bundle.putString("IMAGE_URL",slideShowItems.get(position).image);
        bundle.putString("CAPTION", slideShowItems.get(position).name);
        fragment.setArguments(bundle);
        return fragment;
    }
    @Override
    public int getCount() {
        return slideShowItems.size();
    }
}

这是处理触摸事件的Fragment类。

public class ScreenSlidePageFragment extends Fragment {
String imageUrl,text;
UWSharedPreference preference;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(
            R.layout.fragment_slide_show, container, false);
    rootView.getBackground().setAlpha(200);
    preference = new UWSharedPreference(getActivity());
    imageUrl = getArguments().getString("IMAGE_URL");
    text = getArguments().getString("CAPTION");
    TouchImageView iv_image = (TouchImageView) rootView.findViewById(R.id.jj_image);
    TextView tv_caption = (TextView) rootView.findViewById(R.id.caption_text);
    iv_image.setImageUrl(imageUrl, AppController.getInstance().getImageLoader());
    if (text != null && text.equals("custom")){
        tv_caption.setText("");
    }
    else {
        tv_caption.setText(text);
    }
    iv_image.setOnTouchListener(new OnTouchListener());
    return rootView;
}
class OnTouchListener implements View.OnTouchListener {
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("zambob","On Touch Called for text" + text +" diner txn id" + preference.getDinerTxnID());
        if (text.equals("custom") && preference.getDinerTxnID()!=0 ){
            startActivity(new Intent(getActivity(), FBCheckInActivity.class));
            getActivity().finish();
        }
        else {
            getActivity().onBackPressed();
        }
        return true;
    }
}

}

现在的问题是,在viewpager中,最初加载了3个片段。一个看得见的,一个在它后面。下一个就是。当我触摸到启动意图过程所需的片段时,它不起作用。但是当我在上面一个之前触摸片段时,则所需的过程正在进行。

我应该如何确保,当我触摸可见的片段,然后所需的过程开始?

最后我自己找到了解决办法& &;谷歌的一点帮助:p

实际上我使用深度页面转换器来显示碎片之间的滑动运动。所以我只是通过使用-:

来调整页面转换器
mPager.setPageTransformer(true, new ViewPager.PageTransformer() {
        @Override
        public void transformPage(View page, float position) {
            float translationX;
            float scale;
            float alpha;
            if (position >= 1 || position <= -1) {
                // Fix for https://code.google.com/p/android/issues/detail?id=58918
                translationX = 0;
                scale = 1;
                alpha = 1;
            } else if (position >= 0) {
                translationX = -page.getWidth() * position;
                scale = -0.2f * position + 1;
                alpha = Math.max(1 - position, 0);
            } else {
                translationX = 0.5f * page.getWidth() * position;
                scale = 1.0f;
                alpha = Math.max(0.1f * position + 1, 0);
            }
            mPager.setTranslationX(translationX);
            mPager.setScaleX(scale);
            mPager.setScaleY(scale);
            mPager.setAlpha(alpha);
        }
    });

这只是通过设置比例来确保可见片段被触摸,而不是可见片段后面的那个,alpha &查看寻呼机的翻译。也使查看页的根布局为可点击的。

XML用于呈现View page的活动。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:urbanwand="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    tools:context="com.urbanwand.diner.SlideShowActivity">
    <com.urbanwand.MyViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        urbanwand:scrollduration="500"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

最新更新