Android之---RecycleView实现简单的图片查看功能(类似相册查看器)
2016-12-09 13:46
876 查看
RecycleView实现简单的图片查看功能(类似相册查看器)
效果图
自定义PreviewRecycleView继承自RecycleView
public class PreviewRecycleView extends RecyclerView { public PreviewRecycleView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub this.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } /** * * 滚动时,判断当前第一个View是否发生变化,发生才回调 */ @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); View newView = getChildAt(0); if (mItemScrollChangeListener != null) { if (newView != null && newView != mCurrentView) { mCurrentView = newView ; mItemScrollChangeListener.onChange(mCurrentView, getChildPosition(mCurrentView)); } } } }); } /** * 记录当前第一个View */ private View mCurrentView; private OnItemScrollChangeListener mItemScrollChangeListener; public void setOnItemScrollChangeListener( OnItemScrollChangeListener mItemScrollChangeListener) { this.mItemScrollChangeListener = mItemScrollChangeListener; } public interface OnItemScrollChangeListener { void onChange(View view, int position); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); mCurrentView = getChildAt(0); if (mItemScrollChangeListener != null) { mItemScrollChangeListener.onChange(mCurrentView, getChildPosition(mCurrentView)); } } }
PreviewRecycleView的Adapter
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ViewHolder> { /** * ItemClick的回调接口 * */ public interface OnItemClickLitener { void onItemClick(View view, int position); } private OnItemClickLitener mOnItemClickLitener; public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) { this.mOnItemClickLitener = mOnItemClickLitener; } private LayoutInflater mInflater; private List<Integer> mDatas; public RecycleViewAdapter(Context context, List<Integer> datats) { mInflater = LayoutInflater.from(context); mDatas = datats; } public static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View arg0) { super(arg0); } ImageView mImg; } @Override public int getItemCount() { return mDatas.size(); } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = mInflater.inflate(R.layout.activity_index_gallery_item, viewGroup, false); ViewHolder viewHolder = new ViewHolder(view); viewHolder.mImg = (ImageView) view .findViewById(R.id.id_index_gallery_item_image); return viewHolder; } @Override public void onBindViewHolder(final ViewHolder viewHolder, final int i) { viewHolder.mImg.setImageResource(mDatas.get(i)); //如果设置了回调,则设置点击事件 if (mOnItemClickLitener != null) { viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClickLitener.onItemClick(viewHolder.itemView, i); } }); } } }
MainActicity.java
public class MainActivity extends AppCompatActivity { private PreviewRecycleView mRecyclerView; private RecycleViewAdapter 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); initData(); mRecyclerView = (PreviewRecycleView) findViewById(R.id.id_recyclerview_horizontal); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); mRecyclerView.setLayoutManager(linearLayoutManager); mAdapter = new RecycleViewAdapter(this, mDatas); mRecyclerView.setAdapter(mAdapter); mRecyclerView.setOnItemScrollChangeListener(new PreviewRecycleView.OnItemScrollChangeListener() { @Override public void onChange(View view, int position) { mImg.setImageResource(mDatas.get(position)); }; }); mAdapter.setOnItemClickLitener(new RecycleViewAdapter.OnItemClickLitener() { @Override public void onItemClick(View view, int position) { Toast.makeText(getApplicationContext(), position + "", Toast.LENGTH_SHORT) .show(); mImg.setImageResource(mDatas.get(position)); } }); } /* 初始化数据 */ private void initData() { mDatas=new ArrayList<Integer>( Arrays.asList( R.mipmap.a,R.mipmap.b,R.mipmap.c,R.mipmap.d, R.mipmap.e,R.mipmap.f,R.mipmap.g,R.mipmap.h, R.mipmap.r,R.mipmap.g,R.mipmap.k,R.mipmap.l, R.mipmap.m,R.mipmap.n,R.mipmap.o ) ); } }
底部指示器的Item布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="120dp" android:layout_height="120dp"> <ImageView android:id="@+id/id_index_gallery_item_image" android:layout_width="80dp" android:layout_height="80dp" android:layout_centerInParent="true" android:layout_margin="5dp" android:scaleType="centerCrop" /> </RelativeLayout>
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > <ImageView android:id="@+id/id_content" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" android:layout_margin="10dp" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher" /> </FrameLayout> <com.xiaokele.demo.recycleview_preview.PreviewRecycleView android:id="@+id/id_recyclerview_horizontal" android:layout_width="match_parent" android:layout_height="120dp" android:layout_gravity="bottom" android:scrollbars="none" /> </LinearLayout>
Github源码地址:https://github.com/xiaokele/RecycleView_Preview
相关文章推荐
- Android使用ViewPager、PhotoView实现类似QQ空间图片浏览功能
- Android 布局手势缩放,可滑动查看,实现类似Imgview图片缩放效果
- Android 中 WebView 与 js 简单交互实现图文混排效果,解决图片自适应屏幕与查看大图问题
- Android 中 WebView 与 js 简单交互实现图文混排效果,解决图片自适应屏幕与查看大图问题
- Android 实现WebView点击图片查看大图列表及图片保存功能
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 【Android 开发】:UI控件之 ImageView 实现图片旋转和缩放功能
- 【Android 开发】:UI控件之 ImageView 实现适屏和裁剪图片的功能
- UIScrollView -------- 实现简单的相册功能
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- 使用UIScrollView和UIPageControl实现一个简单的图片浏览功能
- android自定义View实现裁剪图片功能,不使用系统的
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!