Android(安卓)Banner 简单实现
16lz
2021-12-04
参考 http://www.jianshu.com/p/f8bf9e8b0a39
ViewPageAdapter
public class ViewPagerAdapter extends PagerAdapter { private List data; public ViewPagerAdapter(List data) { this.data = data; } @Override public int getCount() { return data.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = new ImageView(container.getContext()); imageView.setScaleType(ImageView.ScaleType.CENTER); imageView.setBackgroundResource(data.get(position)); container.addView(imageView); return imageView;// return super.instantiateItem(container, position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object);// super.destroyItem(container, position, object); }}
布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.alex.viewpagerdemo.MainActivity"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="200dp">android.support.v4.view.ViewPager> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" android:layout_gravity="bottom" android:background="#9977"> <TextView android:id="@+id/banner_title" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="怎么了" android:gravity="center_vertical" android:textColor="@android:color/white" android:paddingLeft="20dp"/> <TextView android:id="@+id/banner_indicator" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="1/4" android:gravity="center_vertical" android:textColor="@android:color/white" android:layout_alignParentRight="true" android:layout_marginRight="20dp"/> RelativeLayout> FrameLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SortLayout" android:textAllCaps="false" android:onClick="sort"/>LinearLayout>
MainActivity
public class MainActivity extends AppCompatActivity { ViewPager viewPager; ViewPagerAdapter adapter; List data; List titleData; int currentPage = 0; boolean viewPagerScrollStatus = false; //标志位,当在手动翻页时,自动翻页暂停 TextView title, indicator; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (!viewPagerScrollStatus) { viewPager.setCurrentItem(++currentPage); } handler.sendEmptyMessageDelayed(1, 1000); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.viewpager); title = (TextView) findViewById(R.id.banner_title); indicator = (TextView) findViewById(R.id.banner_indicator); data = new ArrayList<>(); titleData = new ArrayList<>(); data.add(R.mipmap.t); titleData.add("4.哦"); data.add(R.mipmap.a); titleData.add("1.怎么了"); data.add(R.mipmap.b); titleData.add("2.没事"); data.add(R.mipmap.c); titleData.add("3.那好吧"); data.add(R.mipmap.t); titleData.add("4.哦"); data.add(R.mipmap.a); titleData.add("1.怎么了"); adapter = new ViewPagerAdapter(data); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //头尾衔接,无限循环 if (position == data.size() - 1) { currentPage = 1; } else if (position == 0) { currentPage = data.size() - 2; } else { currentPage = position; } } @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE) { viewPagerScrollStatus = false; viewPager.setCurrentItem(currentPage, false); title.setText(titleData.get(currentPage)); indicator.setText(currentPage + "/" + (titleData.size() - 2)); } else { viewPagerScrollStatus = true; } } }); handler.sendEmptyMessageDelayed(1, 1000); viewPager.setPageTransformer(true, new ViewPager.PageTransformer() { @Override public void transformPage(View page, float position) { int width = page.getWidth(); //我们给不同状态的页面设置不同的效果 //通过position的值来分辨页面所处于的状态 if (position < -1) {//滑出的页面 page.setScrollX((int) (width * 0.75 * -1)); } else if (position <= 1) {//[-1,1] if (position < 0) {//[-1,0] page.setScrollX((int) (width * 0.75 * position)); } else {//[0,1] page.setScrollX((int) (width * 0.75 * position)); } } else {//即将滑入的页面 page.setScrollX((int) (width * 0.75)); } } }); } public void sort(View v) { startActivity(new Intent(this, SortLayoutActivity.class)); }}
效果
更多相关文章
- Android(安卓)模糊效果 FastBlur
- Android中隐藏状态栏和标题栏的方法
- android 4.0 处理状态栏
- LinearLayout 布局 底部固定导航
- android网变化广播接收
- Android自动升级框架
- android欢迎界面淡入淡出效果
- Android实现CoordinatorLayout、RecyclerView返回顶部效果
- Android(安卓)吸入动画效果详解(仿mac退出效果)