首页图片轮播

来源:互联网 发布:做淘宝的电脑配置 编辑:程序博客网 时间:2024/06/09 20:26

先上效果图。相信大家在做项目的时候都有用到首页广告轮播,网上也有很多类似的例子,当然 首先谢谢各位前辈的无私奉献的例子,俗话说站在巨人的肩上看的远,所以有了各位的付出,我们才能走的更远,这是个小例子,在前辈们的例子上稍微改了下,基本实现了viewpager轮播和手势滑动,动态的圆点和标题。

布局文件:

<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.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>


    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="60dp"
        android:background="#20000000"
        android:gravity="center"
        android:orientation="vertical" >


        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="6dp"
            android:layout_marginTop="6dp"
            android:text="这是第一个页面"
            android:textColor="#ffffff" />


        <LinearLayout
            android:id="@+id/dian"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="6dp"
            android:orientation="horizontal"
            android:padding="10dp" >
        </LinearLayout>
    </LinearLayout>


</RelativeLayout>

MainActivity的代码:

package com.example.viewpagerview;


import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;


/**
 * 首页图片轮播
 * 作者:yangfang
 * @author Administrator 
 */
public class FinishActivity extends Activity {
private ViewPager viewPager;
private TextView text;
private LinearLayout layout;
/**
* 用于小圆点的图片
*/
private List<ImageView> dotlist;
/**
* 用于轮播的图片
*/
private List<ImageView> imglist;
private int currentItem = 0;// 当前页面
private boolean isAutoPlay = true;// 是否自动轮播
private ScheduledExecutorService scheduledExecutorService;
private String title[] = { "第一张图片", "第二张图片", "第三张图片", "第四张图片", "第五张图片" };
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 100) {
viewPager.setCurrentItem(currentItem);
}
}
};


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_finish);
viewPager = (ViewPager) findViewById(R.id.viewpager);
text = (TextView) findViewById(R.id.text);
layout = (LinearLayout) findViewById(R.id.dian);
layout.removeAllViews();
initView();
if (isAutoPlay) {
startPlay();
}
}


/**
* 开始轮播图切换
*/
private void startPlay() {
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleAtFixedRate(new SlideShowTask(), 1, 5,
TimeUnit.SECONDS);
// 根据他的参数说明,第一个参数是执行的任务,第二个参数是第一次执行的间隔,第三个参数是执行任务的周期;
}


/**
* 执行轮播图切换任务

*/
class SlideShowTask implements Runnable {


@Override
public void run() {


synchronized (viewPager) {
currentItem = (currentItem + 1) % imglist.size();
mHandler.sendEmptyMessage(100);
}
}
}


private void initView() {
dotlist = new ArrayList<ImageView>();
imglist = new ArrayList<ImageView>();
if (imglist.size() == dotlist.size()) {


for (int i = 0; i < 5; i++) {
ImageView dotView = new ImageView(FinishActivity.this);
LayoutParams params = new LayoutParams(20, 20);
params.leftMargin = 20;// 设置小圆点的外边距
// params.rightMargin = 6;
/*
* params.height = 20;// 设置小圆点的大小 params.width = 20;
*/
dotView.setLayoutParams(params);
// dotView.setEnabled(false);


dotView.setBackgroundResource(R.drawable.pointer_selector);
layout.addView(dotView, params);
dotlist.add(dotView);// 动态添加四个点
text.setText(title[0]);
}
}
ImageView img1 = new ImageView(this);
ImageView img2 = new ImageView(this);
ImageView img3 = new ImageView(this);
ImageView img4 = new ImageView(this);
ImageView img5 = new ImageView(this);
img1.setBackgroundResource(R.drawable.b1);
img2.setBackgroundResource(R.drawable.b2);
img3.setBackgroundResource(R.drawable.b3);
img4.setBackgroundResource(R.drawable.b4);
img5.setBackgroundResource(R.drawable.b5);
imglist.add(img1);
imglist.add(img2);
imglist.add(img3);
imglist.add(img4);
imglist.add(img5);
// viewPager.getChildAt(0).setEnabled(true);
FinishAdapter adapter = new FinishAdapter(this, imglist);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(0);
/**
* ViewPager的监听器 当ViewPager中页面的状态发生改变时调用

*/
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
boolean isAutoPlay = false;


@Override
public void onPageSelected(int arg0) {
// 这里面动态改变小圆点的被背景,来实现效果
currentItem = arg0;
for (int i = 0; i < dotlist.size(); i++) {
if (i == arg0) {
dotlist.get(arg0).setBackgroundResource(
R.drawable.pointer_focus);
text.setText(title[arg0]);
} else {
dotlist.get(i).setBackgroundResource(
R.drawable.pointer_disable);
}
}
}


@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {


}


@Override
public void onPageScrollStateChanged(int arg0) {
switch (arg0) {
case 1:// 手势滑动空闲中
isAutoPlay = false;
System.out.println("手势滑动空闲中");
break;


case 2:// 界面切换
isAutoPlay = true;
System.out.println("界面切换中");
break;
case 0:// 切换结束,加载完毕
// 当前为最后一张,此时从右向左滑,则切换到第一张
if (viewPager.getCurrentItem() == viewPager.getAdapter()
.getCount() - 1 && !isAutoPlay) {
viewPager.setCurrentItem(0);
System.out.println("滑动到最后一张");
}
// // 当前为第一张,此时从左向右滑,则切换到最后一张
else if (viewPager.getCurrentItem() == 0 && !isAutoPlay) {
viewPager.setCurrentItem(viewPager.getAdapter()
.getCount() - 1);
System.out.println("滑动到第一张");
}
break;
case 3:
break;
}


}
});


}
}

适配器Adapter的代码:

package com.example.viewpagerview;


import java.util.List;


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


public class FinishAdapter extends PagerAdapter {
private Context context;
private List<ImageView> mList;


public FinishAdapter(Context context, List<ImageView> mList) {
this.context = context;
this.mList = mList;
}


@Override
public int getCount() {


return mList.size();
}


@Override
public boolean isViewFromObject(View arg0, Object arg1) {


return arg0 == arg1;
}


@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView img = mList.get(position);
ViewParent vp = img.getParent();
if (vp != null) {
ViewPager parent = (ViewPager) vp;
parent.removeView(img);
}
container.addView(mList.get(position));
return mList.get(position);
}


@Override
public void destroyItem(ViewGroup container, int position, Object object) {

//super.destroyItem(container, position, object);
}
}

0 0