Android App开发中使用RecyclerView实现Gallery画廊的实例

2019-12-10 18:27:32于海丽

我放弃了重写onTouchEvent方法,而是让这个类实现RecyclerView.OnScrollListener接口,然后设置监听,在onScrolled里面进行判断。
至于优化:我使用了一个成员变化存储当前第一个View,只有第一个View发生变化时才回调~~太完美了~
看MainActivity:

package com.example.zhy_horizontalscrollview03; 
 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.view.Window; 
import android.widget.ImageView; 
import android.widget.Toast; 
 
import com.example.zhy_horizontalscrollview03.GalleryAdapter.OnItemClickLitener; 
import com.example.zhy_horizontalscrollview03.MyRecyclerView.OnItemScrollChangeListener; 
 
public class MainActivity extends Activity 
{ 
 
  private MyRecyclerView mRecyclerView; 
  private GalleryAdapter mAdapter; 
  private List<Integer> mDatas; 
  private ImageView mImg ;  
   
   
  @Override 
  protected void onCreate(Bundle savedInstanceState) 
  { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.activity_main); 
     
    mImg = (ImageView) findViewById(R.id.id_content); 
 
    mDatas = new ArrayList<Integer>(Arrays.asList(R.drawable.a, 
        R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e, 
        R.drawable.f, R.drawable.g, R.drawable.h, R.drawable.l)); 
 
    mRecyclerView = (MyRecyclerView) findViewById(R.id.id_recyclerview_horizontal); 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
    linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 
 
    mRecyclerView.setLayoutManager(linearLayoutManager); 
    mAdapter = new GalleryAdapter(this, mDatas); 
    mRecyclerView.setAdapter(mAdapter); 
 
    mRecyclerView.setOnItemScrollChangeListener(new OnItemScrollChangeListener() 
    { 
      @Override 
      public void onChange(View view, int position) 
      { 
        mImg.setImageResource(mDatas.get(position)); 
      }; 
    }); 
     
    mAdapter.setOnItemClickLitener(new OnItemClickLitener() 
    { 
      @Override 
      public void onItemClick(View view, int position) 
      { 
//       Toast.makeText(getApplicationContext(), position + "", Toast.LENGTH_SHORT) 
//           .show(); 
        mImg.setImageResource(mDatas.get(position)); 
      } 
    }); 
 
  } 
 
} 

代码没什么变化~多了个设置回调~