2016-07-17 147 views
7

Ho cercato di rendere scorrimento orizzontale come google play.Like questo:come fare lo scrolling orizzontale come google play in Android?

Google Play Scrolling

lo scorrere qualcosa come ViewPager. Metti a fuoco solo un oggetto da sinistra. Ma quando implemento il gestore RecyclerView e LineararLayout orizzontale, ma scorrono agevolmente ma non come google play. Codice è stato dato sotto e qualcuno può aiutarmi a fare lo scorrimento esattamente come lo scorrimento di Google Play?

Dichiarazione Recyclerview:

RecyclerView nowShowingMovies; 

....... 

LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); 
nowShowingMovies.setLayoutManager(layoutManager); 
nowShowingMovies.setHasFixedSize(true); 

NowShowingAdapter adapter = new NowShowingAdapter(getActivity()); 
nowShowingMovies.setAdapter(adapter); 

layout Adattatore:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <LinearLayout 
     android:clickable="true" 
     android:paddingRight="10dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:id="@+id/movieImage" 
      android:layout_width="144dp" 
      android:layout_height="200dp"/> 

    </LinearLayout> 

</LinearLayout> 

AdapterClass:

public class NowShowingAdapter extends RecyclerView.Adapter<NowShowingAdapter.NowShowingViewHolder> { 

    MovieListClick movieListClick; 

    ArrayList<MovieListModel> movieListModel; 
    int movieImageId[] = new int[]{ 
     R.drawable.kubo_image, 
     R.drawable.batman1, 
     R.drawable.jugnle_1, 
     R.drawable.kanfu_1, 
     R.drawable.peanuts, 
     R.drawable.sweetheart 
    }; 
    Context context; 

    public NowShowingAdapter(Context context){ 
     this.context = context; 
    } 

    @Override 
    public NowShowingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(context).inflate(R.layout.movie_for_list,null,false); 
     return new NowShowingViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(NowShowingViewHolder holder, int position) { 
     holder.movieImage.setImageResource(movieImageId[position]); 
    } 

    public void setOnMovieClickListener(MovieListClick movieListClick){ 
     this.movieListClick = movieListClick; 
    } 

    @Override 
    public int getItemCount() { 
     return movieImageId.length; 
    } 

    public class NowShowingViewHolder extends RecyclerView.ViewHolder { 

     public ImageView movieImage; 
     public NowShowingViewHolder(View itemView) { 
      super(itemView); 
      movieImage = (ImageView) itemView.findViewById(R.id.movieImage); 
      movieImage.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        movieListClick.onMovieClick(getLayoutPosition()); 
       } 
      }); 
     } 

    } 
} 
+0

ho un problema di questo tipo prima di prova questo link [Usa RecyclerView all'interno di ScrollView con altezza dell'elemento Recycler flessibile] (http://stackoverflow.com/questions/32420770/use-recyclerview-inside-scrollview-with-flexible- recycler-item-height) – Ashkan

+0

cosa intendi? fai scattare la maggior parte dell'elemento lasciato sul bordo? –

+0

Sì. Ho trovato qualcosa che ha bisogno di controllare il gesto, ma se c'è qualche funzione di buildin sarà utile. –

risposta

2

la libreria di supporto ora include due classi diverse per questo comportamento.

LinearSnapHelper linearSnapHelper = new LinearSnapHelper(); 
linearSnapHelper.attachToRecyclerView(recyclerView); 

Questo è tutto.

Se si desidera una maggiore personalizzazione, è necessario estendere il metodo LinearSnapHelper o PagerSnapHelper e sostituire il metodo calculateDistanceToFinalSnap.