I have a vertical view pager for short news app with poll , ad and insight(horizontal recyclerview), ex inshort news app. when news , poll and ad comes it looks good and scroll works fine but when insight comes with (horizontal recyclerview) then vertical view pager scroll stops working.

//View Pager class

public class VerticalViewPager extends ViewPager {
private GestureDetector mGestureDetector;
View.OnTouchListener mGestureListener;
public VerticalViewPager( Context context) {
    super(context);
    init();
}

public VerticalViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    mGestureDetector = new GestureDetector(context, new YScrollDetector());
    setFadingEdgeLength(0);
    init();
}

private void init() {
    // The majority of the magic happens here
    setPageTransformer(true, new VerticalPageTransformer());
    // The easiest way to get rid of the overscroll drawing that happens on the left and right
    setOverScrollMode(OVER_SCROLL_NEVER);
}

private class VerticalPageTransformer implements ViewPager.PageTransformer {

    @Override
    public void transformPage( View view, float position) {

        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.setAlpha(0);

        } else if (position <= 0) { // [-1,1]
            view.setAlpha(1);

            // Counteract the default slide transition
            view.setTranslationX(view.getWidth() * -position);

            //set Y position to swipe in from top
            float yPosition = position * view.getHeight();
            view.setTranslationY(yPosition);
            view.setScaleX ( 1 );
            view.setScaleY ( 1 );

        } else if ( position<=1 ){ // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setTranslationX ( view.getWidth ()*-position );
            float scale=0.75f + (1-0.75f)*(1-Math.abs ( position ));
            view.setScaleX ( scale );
            view.setScaleY ( scale );
        }else {
            view.setAlpha ( 0 );
        }
    }
}
/**
 * Swaps the X and Y coordinates of your touch event.
 */
private MotionEvent swapXY( MotionEvent ev) {
    float width = getWidth();
    float height = getHeight();

    float newX = (ev.getY() / height) * width;
    float newY = (ev.getX() / width) * height;

    ev.setLocation(newX, newY);

    return ev;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
  /*  boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
    swapXY(ev); // return touch coordinates to original reference frame for any child views
    return intercepted;*/
    return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    return super.onTouchEvent(swapXY(ev));
}
// Return false if we're scrolling in the x direction
class YScrollDetector extends GestureDetector.SimpleOnGestureListener {
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        if (Math.abs(distanceY) > Math.abs(distanceX)) {
            return true;
        }
        return false;
    }
}
}

//View Pager adaptor class

public class ViewPagerAdaptor extends PagerAdapter {
ArrayList<SliderItems>sliderItems;
LayoutInflater layoutInflater;
Context context;
private ArrayList<Pojo> alBanner;
private ArrayList<Pojo> alPlansB;

public ViewPagerAdaptor( ArrayList<SliderItems>sliderItems, Context context ){
    this.sliderItems=sliderItems;
    this.context=context;
    layoutInflater=(LayoutInflater)context.getSystemService ( Context.LAYOUT_INFLATER_SERVICE );
}
@Override
public int getCount (){
    return sliderItems.size ();
}
@Override
public boolean isViewFromObject(View view, Object object) {
    return view == object;
}

@NonNull
@Override
public Object instantiateItem (  ViewGroup container , int position ){
    switch (sliderItems.get ( position ).getArticleType ( )) {
        case "1": {
            View itemView = layoutInflater.inflate ( R.layout.layout_insightnews , container , false );
            container.addView ( itemView );
            ImageView imgBookmark = ( ImageView ) itemView.findViewById ( R.id.img_bookmark );
            ImageView imgNews = ( ImageView ) itemView.findViewById ( R.id.img_news );
            TextView tvTitle = ( TextView ) itemView.findViewById ( R.id.tv_title );
            TextView tvDesc = ( TextView ) itemView.findViewById ( R.id.tv_desc );
            TextView tvCat = ( TextView ) itemView.findViewById ( R.id.nfbjeh );
            try {
                JSONObject jsonObject = new JSONObject ( sliderItems.get ( position ).getMainObject ( ) );
                tvTitle.setText ( sliderItems.get ( position ).getTitle ( ) );
                tvDesc.setText ( sliderItems.get ( position ).getDesc ( ) );
                tvCat.setText ( sliderItems.get ( position ).getCatName ( ) );
                if ( !sliderItems.get ( position ).getImages ( ).equals ( "" ) ) {
                    Glide.with ( context )
                            .load ( sliderItems.get ( position ).getImages ( ) )
                            .centerCrop ( )
                            .into ( imgNews );
                }
                if ( sliderItems.get ( position ).getIsSaved ( ).equals ( "0" ) ) {
                    imgBookmark.setImageResource ( R.drawable.bookmark );
                } else {
                    imgBookmark.setImageResource ( R.drawable.bookmarked );
                }
                imgBookmark.setOnClickListener ( new View.OnClickListener ( ) {
                    @Override
                    public void onClick ( View view ){
                        methodBookmark ( sliderItems.get ( position ).getIds ( ) , imgBookmark );
                    }//Added News to Bookmark.
                } );
            } catch (JSONException e) {
                e.printStackTrace ( );
            }
            return itemView;
        }
        case "2": {
            View itemView = layoutInflater.inflate ( R.layout.layout_polllist , container , false );
            container.addView ( itemView );
            TextView tvYes=(TextView )itemView.findViewById ( R.id.tv_yes );
            TextView tvNo=(TextView )itemView.findViewById ( R.id.tv_no );
            ImageView imgNews=(ImageView ) itemView.findViewById ( R.id.img_news );
            TextView tvTitle=(TextView ) itemView.findViewById ( R.id.tv_title );
            TextView tvDesc=(TextView )itemView.findViewById ( R.id.tv_desc );
            TextView tvCat=(TextView )itemView.findViewById ( R.id.nfbjeh );
            try {
                JSONObject jsonObject = new JSONObject ( sliderItems.get ( position ).getMainObject ( ) );
                tvTitle.setText ( sliderItems.get ( position ).getTitle () );
                tvDesc.setText ( sliderItems.get ( position ).getDesc () );
                TextView tvPoll=(TextView )itemView.findViewById ( R.id.tv_question );
                tvPoll.setText ( jsonObject.getString ( "question" ) );
                tvCat.setText ( sliderItems.get ( position ).getCatName () );
                if ( jsonObject.getString ( "status" ).equals ( "1" ) ){
                    int total=jsonObject.getInt ( "negetive_count" )+jsonObject.getInt ( "possitive_count" );
                    int percent = 0;
                    int percentb = 0;
                    if (total > 0){
                        percent = jsonObject.getInt ( "negetive_count" ) * 100 / total;
                        percentb = jsonObject.getInt ( "possitive_count" ) * 100 / total;
                        tvYes.setText ( percentb+"%" );
                        tvNo.setText ( percent+"%" );

                        //Log.v ( "bvghvj",percent+"");
                        //Toast.makeText ( context, percent+"",Toast.LENGTH_LONG).show ();
                    }
                }
                if ( !sliderItems.get ( position ).getImages().equals ( "" ) ){
                    Glide.with( context)
                            .load(sliderItems.get ( position ).getImages())
                            .centerCrop()
                            .into(imgNews);
                }
                tvNo.setOnClickListener ( new View.OnClickListener ( ) {
                    @Override
                    public void onClick ( View view ){
                        methodPoll(tvNo,tvYes,sliderItems.get ( position ).getIds (),"0");
                    }
                } );
                tvYes.setOnClickListener ( new View.OnClickListener ( ) {
                    @Override
                    public void onClick ( View view ){
                        methodPoll(tvNo,tvYes,sliderItems.get ( position ).getIds (),"1");
                    }
                } );
            } catch (JSONException e) {
                e.printStackTrace ( );
            }
            return itemView;
        }
        case "3": {
            View itemView = layoutInflater.inflate ( R.layout.layout_insightmain , container , false );
            container.addView ( itemView );
            try {
                JSONObject jsonObject = new JSONObject ( sliderItems.get ( position ).getMainObject ( ) );
                JSONArray jsonArray=jsonObject.getJSONArray ( "insight_image" );
                RecyclerView rvInsightView=(RecyclerView )itemView.findViewById ( R.id.rv_insightview );
                InsightView_Adaptor insightView_adaptor = new InsightView_Adaptor ( context , getMatchInsightView ( jsonArray ) );
                rvInsightView.setAdapter ( insightView_adaptor );
                rvInsightView.setNestedScrollingEnabled(false);
                rvInsightView.setHasFixedSize(true);
                rvInsightView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
                    @Override
                    public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
                        ViewParent vp = rv.getParent();
                        int action = e.getAction();
                        //check if can scroll horizontally both to right and to left
                        boolean tolLeft = rv.canScrollHorizontally(-1);
                        boolean tolRight = rv.canScrollHorizontally(1);
                        if (tolRight || tolLeft) {
                            if (action == MotionEvent.ACTION_MOVE) {
                                int historySize = e.getHistorySize();
                                boolean b = true;
                                if (historySize > 0) {
                                    float x2 = e.getX();
                                    float y2 = e.getY();
                                    float x1 = e.getHistoricalX(0);
                                    float y1 = e.getHistoricalY(0);
                                    //check if user's touch is not going up or down the screen
                                    //and if he/she's moving right if possible
                                    //or left if possible
                                    b = Math.abs(x2 - x1) > Math.abs(y2 - y1) && ( (tolLeft && (x2 - x1) > 0) || (tolRight && (x2 - x1) < 0) );
                                }
                                vp.requestDisallowInterceptTouchEvent(b);
                            }
                            return false;
                        }else {
                            if (action == MotionEvent.ACTION_MOVE)
                                vp.requestDisallowInterceptTouchEvent(false);
                            rv.removeOnItemTouchListener(this);
                            return true;
                        }
                    }
                });
                final int radius = context.getResources().getDimensionPixelSize(R.dimen.radius);
                final int dotsHeight = context.getResources().getDimensionPixelSize(R.dimen.dots_height);
                final int color = ContextCompat.getColor(context, R.color.theme_color);
                final int colorb = ContextCompat.getColor(context, R.color.white);
                rvInsightView.addItemDecoration(new DotsIndicatorDecoration (radius, radius * 4, dotsHeight, colorb, color));
                new PagerSnapHelper ().attachToRecyclerView(rvInsightView);
            } catch (JSONException e) {
                e.printStackTrace ( );
            }
            return itemView;
        } default: {
            View itemView = layoutInflater.inflate ( R.layout.layout_ad , container , false );
            container.addView ( itemView );
            ImageView imgAd=(ImageView ) itemView.findViewById ( R.id.img_news );
            if ( !sliderItems.get ( position ).getImages().equals ( "" ) ){
                Glide.with( context)
                        .load(sliderItems.get ( position ).getImages())
                        .centerCrop()
                        .into(imgAd);
            }
            imgAd.setOnClickListener ( new View.OnClickListener ( ) {
                @Override
                public void onClick ( View view ){
                    Intent intent=new Intent ( context, WebviewNews.class );
                    intent.putExtra ( "str_link",sliderItems.get (position).getLinks () );
                    context.startActivity ( intent );
                   // context.overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
                }
            } );
            return itemView;
        }
    }
}
private void methodBookmark ( String ids , ImageView imgBookmark ){
    RequestQueue myRequestQueue = Volley.newRequestQueue ( context );
    StringRequest MyStringRequest = new StringRequest ( Request.Method.GET , context.getResources ( ).getString ( R.string.base_url ) + "bookmark-news/"+ids , new Response.Listener<String> ( ) {
        @Override
        public void onResponse ( String response ) {
            try {
                JSONObject jsonObject = new JSONObject ( response );
                if ( jsonObject.getString ( "success" ).equals ( "true" ) ) {
                    Toast.makeText(context ,jsonObject.getString ( "message" ),Toast.LENGTH_LONG).show ();
                    if ( jsonObject.getString ( "message" ).equals ( "Removed News to Bookmark.") ){
                        imgBookmark.setImageResource(R.drawable.bookmark);
                    }else {
                        imgBookmark.setImageResource(R.drawable.bookmarked);
                    }
                } else {
                    Toast.makeText(context ,jsonObject.getString ( "message" ),Toast.LENGTH_LONG).show ();
                }
            } catch (JSONException e) {
                e.printStackTrace ( );
            }
        }
    } , new Response.ErrorListener ( ) {
        @Override
        public void onErrorResponse ( VolleyError error ) {
            Toast.makeText(context ,error.getMessage (),Toast.LENGTH_LONG).show ();
        }
    } ) {
        @Override
        public Map<String, String> getHeaders () throws AuthFailureError{
            Map<String, String> params = new HashMap<String, String> ( );
            params.put ( "Authorization" ,"Bearer "+ SPUser.getValue ( context,SPUser.TOKEN ) );
            return params;
        }

        @Override
        public HashMap<String, String> getParams () {
            HashMap<String, String> params = new HashMap<String, String> ( );
            return params;
        }
    };
    RetryPolicy retryPolicy = new RetryPolicy ( ) {
        @Override
        public int getCurrentTimeout () {
            return 50000;
        }

        @Override
        public int getCurrentRetryCount () {
            return 0;
        }

        @Override
        public void retry ( VolleyError error ) throws VolleyError {

        }
    };
    myRequestQueue.add ( MyStringRequest ).setRetryPolicy ( retryPolicy );
}
private ArrayList<Pojo> getMatchInsightView ( JSONArray json_Insight ) {
    alPlansB = new ArrayList<Pojo> ( );
    for ( int i = 0; i < json_Insight.length (); i++ ) {
        try {
            JSONObject jsonObject=json_Insight.getJSONObject ( i );
            Pojo pojo = new Pojo ( );
            pojo.setId ( jsonObject.getString ( "insight_id" ) );
            pojo.setImages ( jsonObject.getString ( "image" ) );
            alPlansB.add ( pojo );
        } catch (JSONException e) {
            e.printStackTrace ( );
        }

    }
    return alPlansB;
}
private void methodPoll ( TextView tvNo , TextView tvYes , String ids, String strAns ){
    ProgressDialog progressDialog = new ProgressDialog ( context );
    progressDialog.setTitle ( "Loading..." );
    progressDialog.show ();
    RequestQueue myRequestQueue = Volley.newRequestQueue ( context );
    StringRequest MyStringRequest = new StringRequest ( Request.Method.POST , context.getResources ( ).getString ( R.string.base_url ) + "poll-result" , new Response.Listener<String> ( ) {
        @Override
        public void onResponse ( String response ) {
            progressDialog.dismiss ();
            try {
                JSONObject jsonObject = new JSONObject ( response );
                if ( jsonObject.getString ( "success" ).equals ( "true" ) ) {
                    JSONObject object =jsonObject.getJSONObject ( "data" );
                    int total=object.getInt ( "negetive_count" )+object.getInt ( "possitive_count" );
                    int percent = 0;
                    int percentb = 0;
                    if (total > 0){
                        percent = object.getInt ( "negetive_count" ) * 100 / total;
                        percentb = object.getInt ( "possitive_count" ) * 100 / total;
                        tvYes.setText ( percentb+"%" );
                        tvNo.setText ( percent+"%" );

                        //Log.v ( "bvghvj",percent+"");
                        //Toast.makeText ( context, percent+"",Toast.LENGTH_LONG).show ();
                    }
                } else {
                    Toast.makeText(context ,jsonObject.getString ( "message" ),Toast.LENGTH_LONG).show ();
                }
            } catch (JSONException e) {
                e.printStackTrace ( );
            }
        }
    } , new Response.ErrorListener ( ) {
        @Override
        public void onErrorResponse ( VolleyError error ) {
            progressDialog.dismiss ();
            Toast.makeText(context ,error.getMessage (),Toast.LENGTH_LONG).show ();
        }
    } ) {
        @Override
        public Map<String, String> getHeaders () throws AuthFailureError{
            Map<String, String> params = new HashMap<String, String> ( );
            params.put ( "Authorization" ,"Bearer "+ SPUser.getValue ( context,SPUser.TOKEN ) );
            return params;
        }

        @Override
        public HashMap<String, String> getParams () {
            HashMap<String, String> params = new HashMap<String, String> ( );
            params.put ( "poll_id",ids );
            params.put ( "answer",strAns );
            return params;
        }
    };
    RetryPolicy retryPolicy = new RetryPolicy ( ) {
        @Override
        public int getCurrentTimeout () {
            return 50000;
        }

        @Override
        public int getCurrentRetryCount () {
            return 0;
        }

        @Override
        public void retry ( VolleyError error ) throws VolleyError {

        }
    };
    myRequestQueue.add ( MyStringRequest ).setRetryPolicy ( retryPolicy );
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView ((RelativeLayout)object );

}
}
0

There are 0 best solutions below