NGallery
项目地址:niezhiyang/NGallery
简介:利用 Viewpager 实现真正的 Gallery, 左右条目可点击居中, 左右条目可滑动,也就是可以获得焦点
利用 Viewpager 实现真正的 Gallery, 左右条目可点击, 左右条目可滑动
详情请看博客 http://blog.csdn.net/qq_33408235/article/details/72650452
首先看一下效果:
从图上可以看出, 两边的 item 可以被点击, 可以被滑动,也就是可以获得焦点
demoapk 位置:demo.apk
使用方式
添加依赖
1.在根目录的 build.gradle 中添加
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }// 添加 jitpack.依赖
}
2.在 app 的 build.gradle 中添加
compile 'com.github.niezhiyang:NGallery:v1.0.1'
在使用的 xml 中,用一个父控件包裹住 GalleryViewPager,目的是为了控制父控件的滑动,和点击,来设置 Viewpager 的状态
<RelativeLayout
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
>
<!--是否限制子 View 在其范围内,我们将其值设置为 false 后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩-->
<com.nie.ngallerylibrary.GalleryViewPager
android:id="@+id/viewpager"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:clipChildren="false"
android:overScrollMode="never"/>
</RelativeLayout>
代码中设置
mViewPager = (GalleryViewPager) findViewById(R.id.viewpager);//找到这个控件
mViewPager.setPageTransformer(true, new ScalePageTransformer());//设置 PageTransformer,本库只有一个 ScalePageTransformer,如果这个 ScalePageTransformer 满足不了您的需求,您可以自己写一个 PageTransformer
findViewById(R.id.root).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return mViewPager.dispatchTouchEvent(event);
}
});//找到这个父控件设置他的 listener
mPagerAdapter = new SimpleAdapter(this);//初始化 adapter
mViewPager.setAdapter(mPagerAdapter);//设置 adapter
adapter 要继承 MyPageradapter;例如
public class SimpleAdapter extends MyPageradapter {
private final List<Integer> mList;
private final Context mContext;
public SimpleAdapter(Context context) {
mList = new ArrayList<>();
mContext = context;
}
public void addAll(List<Integer> list) {
mList.addAll(list);
notifyDataSetChanged();
}
@Override
public View getView(final int position, View convertView, ViewGroup container) {
ImageView imageView = null;
if (convertView == null) {
imageView = new ImageView(mContext);
} else {
imageView = (ImageView) convertView;
}
imageView.setTag(position);
imageView.setImageResource(mList.get(position));
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if ((mViewPager.getCurrentItem() ) == position) {
Toast.makeText(mContext, "点击的位置是:::"+position, Toast.LENGTH_SHORT).show();
}
}
});
return imageView;
}
@Override
public int getCount() {
return mList.size();
}
}