andriod中 viewpage+小圆点实现联动循环播放

 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"
    
    tools:context="com.example.text_1113_imgge.MainActivity" >
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         />
 <LinearLayout
     android:id="@+id/myliner"
     android:layout_width="match_parent"
     android:layout_height=" 40dp"
     android:gravity="center"
     android:orientation="horizontal"
     android:layout_alignParentBottom="true"
     android:background="#22000000"
      />
 </RelativeLayout>
</RelativeLayout>
圆点的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <View
        android:id="@+id/yuandian"
        android:layout_width="8dp"
        android:layout_height="8dp"
        android:layout_marginLeft="3dp"
        android:layout_marginRight="3dp"
        android:background="@drawable/dot_shape"
        />

</LinearLayout>

圆点颜色设置,在drawable中定义两个xml颜色

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <corners
        android:radius="8dp"
        />
<solid android:color="#ffffffff"/>
</shape>

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <corners
        android:radius="8dp"
        />
<solid android:color="#88000000"/>
</shape>



工程代码:

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

import com.bawei.pageadapter.Mypageadapter;
import com.lidroid.xutils.BitmapUtils;
 
 

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;
/*1,配置xml. viewpage    android.support.v4.view.ViewPager ,
   * LinearLayout控件,再创建一个圆点xml--view定义大小,
   * drawable配置圆点样式
  2,使用BitmapUtils 加载网络图片。
  3,开启子线程
 4,*/

public class MainActivity extends Activity {

    private ViewPager vp;
//    图片控件集合
    private List<ImageView>im_list=new ArrayList<ImageView>();
   private Mypageadapter mypage ;
    private BitmapUtils bitmapUtils;
    private List<View>dot_list=new ArrayList<View>();//圆点集合
    
// 动态添加圆点布局
    private LinearLayout myliner;
     private String[] ima_url = new String[]{
             "http://pic8.nipic.com/20100701/5290458_114840036316_2.jpg",
             "http://pic2.nipic.com/20090424/1468853_230119053_2.jpg",
             "http://img3.3lian.com/2013/s1/20/d/57.jpg",
             "http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg",
             "http://a0.att.hudong.com/15/08/300218769736132194086202411_950.jpg"
     };

      
// 开启子线程,循环次数
     private int im_cont=0;
     Handler handle=new Handler();
     Runnable runnable=new Runnable() {
        
        public void run() {
            im_cont=im_cont+1;
             vp.setCurrentItem(im_cont%im_list.size());
             handle.postDelayed(runnable, 2500);//设置循环播放时间
            
        }
    };

  


protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建对象 bitmapUtils
       bitmapUtils=new BitmapUtils(this);
        myliner=(LinearLayout) findViewById(R.id.myliner);
        ImageList();
        getdotlist();
        vp=(ViewPager) findViewById(R.id.vp);
         
         mypage=new Mypageadapter(this, im_list);
         vp.setAdapter(mypage);
         //设置圆点颜色的默认值
            dot_list.get(0).setBackgroundResource(R.drawable.dot_facuesd);
            //  滑动页面播放
         vp.setOnPageChangeListener(new OnPageChangeListener() {
            
             private int old_position=0;
            public void onPageSelected(int arg0) {
                // 定义圆点的样式
                dot_list.get(old_position).setBackgroundResource(R.drawable.dot_shape);
                dot_list.get(arg0).setBackgroundResource(R.drawable.dot_facuesd);
                old_position=arg0;
                
            }
             public void onPageScrolled(int arg0, float arg1, int arg2) {
                
            }
            
            @Override
            public void onPageScrollStateChanged(int arg0) {
            
            }
        });
        
       handle.postDelayed(runnable, 2500);
    }
    /**
     * 圆点的集合
     * 根据需要加载的ImageList大小,设置小圆点的个数
     */
 
    private void getdotlist() {
        // TODO Auto-generated method stub
        for(int i=0;i<im_list.size();i++){
             View view=LayoutInflater.from(this).inflate(R.layout.dot_point, null);
             dot_list.add(view.findViewById(R.id.yuandian));
             myliner.addView(view);
        }
        
    }
    /**
     * 根据图片地址数量,异步加载Imageview,并将Imageview添加进imageview集合中
     */

    private void ImageList() {
        for(int i=0;i<ima_url.length;i++){
            ImageView  image=new ImageView(this);
            image.setScaleType(ScaleType.FIT_XY);//图片充满
             bitmapUtils.display(image, ima_url[i]);
            
            im_list.add(image);
     }
    }
}

pageadapter适配代码

package com.bawei.pageadapter;

import java.util.ArrayList;
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;

public class Mypageadapter extends PagerAdapter {

    Context context;
    private List<ImageView>list=new ArrayList<ImageView>();
    
    public Mypageadapter(Context context, List<ImageView> list) {
        super();
        this.context = context;
        this.list = list;
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @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
        //super.destroyItem(container, position, object);
        ImageView view=list.get(position);
        container.removeView(view);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        ImageView view=list.get(position);
        container.addView(view);
        return view ;
    }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Android 结合 ViewPager 和 RecyclerView 实现横向翻页无限循环的代码示例: 1. 在布局文件定义 ViewPager 和 RecyclerView: ```xml <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="200dp" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 2. 在 Activity 或 Fragment 初始化 ViewPager 和 RecyclerView: ```java private ViewPager mViewPager; private MyPagerAdapter mPagerAdapter; private RecyclerView mRecyclerView; private LinearLayoutManager mLinearLayoutManager; private List<MyData> mDataList; private MyAdapter mAdapter; private int mCurrentPosition = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mViewPager = findViewById(R.id.view_pager); mRecyclerView = findViewById(R.id.recycler_view); // 设置 ViewPager 适配器 mPagerAdapter = new MyPagerAdapter(this); mViewPager.setAdapter(mPagerAdapter); // 初始化数据 mDataList = new ArrayList<>(); for (int i = 0; i < 20; i++) { mDataList.add(new MyData("Item " + i)); } // 初始化适配器 mAdapter = new MyAdapter(this, mDataList); // 初始化布局管理器 mLinearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); mRecyclerView.setLayoutManager(mLinearLayoutManager); // 设置适配器 mRecyclerView.setAdapter(mAdapter); // 监听 RecyclerView 滚动事件 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); // 计算当前显示在 ViewPager 的位置 int position = mLinearLayoutManager.findFirstCompletelyVisibleItemPosition(); if (position != RecyclerView.NO_POSITION && position != mCurrentPosition) { mCurrentPosition = position; mViewPager.setCurrentItem(mCurrentPosition, false); } } }); // 监听 ViewPager 页面切换事件 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { // 设置 RecyclerView 滚动到对应位置 mRecyclerView.smoothScrollToPosition(position); mCurrentPosition = position; } @Override public void onPageScrollStateChanged(int state) { } }); // 初始化第一个页面 mViewPager.setCurrentItem(mCurrentPosition); mRecyclerView.scrollToPosition(mCurrentPosition); } ``` 3. 编写 ViewPager 和 RecyclerView 的适配器和数据类: ```java public class MyPagerAdapter extends PagerAdapter { private Context mContext; public MyPagerAdapter(Context context) { mContext = context; } @Override public int getCount() { return 20; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = LayoutInflater.from(mContext).inflate(R.layout.item_my_pager, container, false); TextView textView = view.findViewById(R.id.tv_text); textView.setText("Page " + position); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private Context mContext; private List<MyData> mDataList; public MyAdapter(Context context, List<MyData> dataList) { mContext = context; mDataList = dataList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item_my_data, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { MyData data = mDataList.get(position); holder.mTextView.setText(data.getText()); } @Override public int getItemCount() { return mDataList.size(); } } public class MyViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.tv_text); } } public class MyData { private String mText; public MyData(String text) { mText = text; } public String getText() { return mText; } } ``` 在这个示例,当用户滑动 RecyclerView 时,会自动滑动到对应的 ViewPager 页面,当用户滑动 ViewPager 页面时,会自动滑动到对应的 RecyclerView 列表项,实现了横向翻页无限循环效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值