本文实例为大家分享了android使用viewpager实现画廊式效果的具体代码,供大家参考,具体内容如下
先看一下效果

1.创建一个自定义类 zoomoutpagetransformer
public class zoomoutpagetransformer implements viewpager.pagetransformer {
//自由控制缩放比例
private static final float max_scale = 1f;
private static final float min_scale = 0.8f;//0.85f
@override
public void transformpage(view page, float position) {
if (position <= 1) {
float scalefactor = min_scale + (1 - math.abs(position)) * (max_scale - min_scale);
page.setscalex(scalefactor);
if (position > 0) {
page.settranslationx(-scalefactor * 2);
} else if (position < 0) {
page.settranslationx(scalefactor * 2);
}
page.setscaley(scalefactor);
} else {
page.setscalex(min_scale);
page.setscaley(min_scale);
}
}
}
2.创建适配器myadapter
public class myadapter extends pageradapter {
private int[] mdata;
private context mcontext;
public myadapter(context ctx, int[] data) {
this.mcontext = ctx;
this.mdata = data;
}
@override
public int getcount() {
return mdata.length;// 返回数据的个数
}
@override
public object instantiateitem(final viewgroup container, final int position) {//子view显示
view view = view.inflate(container.getcontext(), r.layout.item, null);
imageview imageview = view.findviewbyid(r.id.iv_icon);
imageview.setimageresource(mdata[position]);
imageview.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view view) {
toast.maketext(mcontext, "当前条目:" + position, toast.length_short).show();
}
});
container.addview(view);//添加到父控件
return view;
}
@override
public boolean isviewfromobject(view view, object object) {
return view == object;// 过滤和缓存的作用
}
@override
public void destroyitem(viewgroup container, int position, object object) {
container.removeview((view) object);//从viewpager中移除掉
}
}
3.item布局
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <imageview android:id="@+id/iv_icon" android:layout_width="match_parent" android:scaletype="centercrop" android:src="@mipmap/ic_launcher" android:layout_height="match_parent"/> </linearlayout>
4.activity_main布局
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:clipchildren="false" android:orientation="vertical"> <textview android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="5dp" android:text="viewpager实现画廊效果" android:textcolor="@color/colorprimary"/> <androidx.viewpager.widget.viewpager android:id="@+id/viewpager" android:layout_width="200dp" android:layout_height="300dp" android:layout_gravity="center" android:layout_marginbottom="30dp" android:clipchildren="false" android:layout_margintop="30dp"/> </linearlayout>
5.main_activity
public class mainactivity extends appcompatactivity {
private viewpager mviewpager;
private linearlayout ll_layout;
//向导界面的图片
private int[] mpics = new int[]{r.mipmap.ic_launcher, r.mipmap.ic_launcher, r.mipmap.ic_launcher, r.mipmap.ic_launcher, r.mipmap.ic_launcher};
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
initview();
}
private void initview() {
mviewpager = (viewpager) findviewbyid(r.id.viewpager);
ll_layout = (linearlayout) findviewbyid(r.id.ll_layout);
//设置适配器
mviewpager.setadapter(new myadapter(this, mpics));
mviewpager.setpagemargin(20);
mviewpager.setoffscreenpagelimit(mpics.length);
mviewpager.setpagetransformer(true, new zoomoutpagetransformer());//设置画廊模式
//左右都有图
mviewpager.setcurrentitem(1);
//viewpager左右两边滑动无效的处理
ll_layout.setontouchlistener(new view.ontouchlistener() {
@override
public boolean ontouch(view view, motionevent motionevent) {
return mviewpager.dispatchtouchevent(motionevent);
}
});
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
a07葬心