ViewPager无限轮播与自动轮播简单demo

由于ViewPager是存在与V4包的所以xml中添加组件需要手动填写

操作步骤如下:

Ø  创建一个Android项目,在主Activity的布局文件中创建一个ViewPager控件和一个Button控件,Button控件的默认显示为“Gone”(3分钟)

Ø  在主Activity中实现ViewPager功能(10分钟)

1、  实例化控件

2、  初始化数据

3、  创建适配器对象

4、  绑定适配器

Ø  添加ViewPager的监听器,当滑动到第三页时,设置Button按钮的显示状态为“visible”,当滑动后如果不是第三页则设置button按钮的显示状态为“gone”(5分钟)

Ø  给Button按钮添加点击监听,点击后跳转到显示“我是主页面”的Activity。(2分钟)


<android.support.v4.view.ViewPager

/>

接下来直接上干货xml代码

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
<!--  这里就是ViewPaget组件-->
    <android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    
    
    />
<!-- ViewPager组件自动轮播的时候给予的动态效果-->
    <RadioGroup
        android:id="@+id/group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/viewpager"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="124dp"
        android:orientation="horizontal" >
    
        <RadioButton
            android:id="@+id/button01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <RadioButton
            android:id="@+id/button02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <RadioButton
            android:id="@+id/button03"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RadioGroup>

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/viewpager"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="47dp"
        android:text="体验"
        android:visibility="gone"
        />

</RelativeLayout>

activity_show.xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ShowActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是主页" />

</RelativeLayout>


接下来是java代码片段首先写的是Viewpager的适配器

ViewPagerAdapter.java


package com.example.Adapter;

import java.util.List;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

public class ViewPagerAdapter extends PagerAdapter {
//这个是传入的图片集合
    private List<Integer> list;

//上下文

    private Context context;
    
    public ViewPagerAdapter(List<Integer> list, Context context) {
        super();
        this.list = list;
        this.context = context;
    }


//想要设置无限轮播必须要在getCount中设置整数的最大值
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Integer.MAX_VALUE;
    }

//判断是否在连接状态
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0==arg1;
    }
//删除视图的方法

//如果不删除返回值 在底层则会抛出异常,底层返回的就是异常

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        
        container.removeView((View) object);
    }
//添加创建视图方法

//自动轮播无限轮播只试用于图片ImageView 组件,如有其他自己开发!


    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        
        ImageView imageView = new ImageView(context);
        imageView.setImageResource(list.get(position%list.size()));

//这行代码是拉伸图片yx轴坐标

        imageView.setScaleType(ScaleType.FIT_XY);
        container.addView(imageView);
        
        
        
        return imageView;
    }

    
}


MainActivity.java


package com.example.demo3;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioGroup;

import com.example.Adapter.ViewPagerAdapter;

public class MainActivity extends Activity {

    private RadioGroup group;
    private Button btn;
    private ViewPager viewpager;
    private List<Integer> list;
    private Handler  handler = new Handler();
    private int i;
    private Runnable runnable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //获取控件
        setContentView(R.layout.activity_main);
        group = (RadioGroup) findViewById(R.id.group);
        btn = (Button) findViewById(R.id.btn);
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        //模拟数据
        list = new ArrayList<Integer>();
        list.add(R.drawable.yi);
        list.add(R.drawable.er);
        list.add(R.drawable.san);
        //加载适配器
        ViewPagerAdapter adapter = new ViewPagerAdapter(list, this);
        viewpager.setAdapter(adapter);
        viewpager.setCurrentItem(list.size()*10000);

//这个被注释掉的部分就是自动轮播

       /* i = viewpager.getCurrentItem();
        runnable = new Runnable() {
            
            @Override
            public void run() {
                i++;
                viewpager.setCurrentItem(i);
                handler.postDelayed(runnable, 1000);
            }
        };
        handler.postDelayed(runnable, 1000);*/
        
        
        
        viewpager.setOnPageChangeListener(new OnPageChangeListener() {
            
            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                
                switch (arg0%list.size()) {
                case 0:
                    group.check(R.id.button01);
                    btn.setVisibility(View.GONE);
                    break;
                case 1:
                    group.check(R.id.button02);
                    btn.setVisibility(View.GONE);
                    break;
                case 2:
                    group.check(R.id.button03);
                    btn.setVisibility(View.VISIBLE);
                    break;
                }
                
            }
            
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub
                
            }
        });
        
        btn.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {

                Intent intent = new Intent(MainActivity.this, ShowActivity.class);
                startActivity(intent);
                
                
            }
        });
    }
    

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}
ShowActivity.java

package com.example.demo3;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class ShowActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.show, menu);
        return true;
    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现ViewPager2的轮播,可以按照以下步骤进行操作: 1. 在build.gradle文件中添加ViewPager2的依赖项: ``` implementation 'androidx.viewpager2:viewpager2:1.0.0' ``` 2. 在布局文件中添加ViewPager2: ``` <androidx.viewpager2.widget.ViewPager2 android:id="@+id/viewPager2" android:layout_width="match_parent" android:layout_height="200dp" /> ``` 3. 创建一个PagerAdapter,用于填充ViewPager2的数据: ``` class MyPagerAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) { private val images = arrayOf( R.drawable.image1, R.drawable.image2, R.drawable.image3 ) override fun getItemCount(): Int { return images.size } override fun createFragment(position: Int): Fragment { val fragment = MyFragment() fragment.arguments = Bundle().apply { putInt("image", images[position]) } return fragment } } ``` 这里使用了FragmentStateAdapter来填充数据,也可以使用RecyclerView.Adapter进行填充。 4. 在Activity或Fragment中初始化ViewPager2,并设置PagerAdapter: ``` val viewPager2 = findViewById<ViewPager2>(R.id.viewPager2) val pagerAdapter = MyPagerAdapter(this) viewPager2.adapter = pagerAdapter ``` 5. 设置ViewPager2的轮播效果: ``` viewPager2.postDelayed(object : Runnable { override fun run() { viewPager2.currentItem = (viewPager2.currentItem + 1) % pagerAdapter.itemCount viewPager2.postDelayed(this, 2000) } }, 2000) ``` 在postDelayed方法中,使用了Runnable来实现ViewPager2的轮播效果。其中,2000表示轮播的间隔时间,可以根据需要进行调整。 以上就是实现ViewPager2轮播的最简单方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值