首页 > 代码库 > Android自定义控件5--轮播图广告ViewPager基本实现

Android自定义控件5--轮播图广告ViewPager基本实现

本文地址:http://www.cnblogs.com/wuyudong/p/5918021.html,转载请注明源地址。

本文开始实现轮播图广告系列,这篇文章首先实现让图片滑动起来(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"    tools:context=".MainActivity" >    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="160dp" >        <android.support.v4.view.ViewPager            android:id="@+id/viewpager"            android:layout_width="match_parent"            android:layout_height="match_parent" />        <LinearLayout            android:layout_width="match_parent"            android:layout_height="40dp"            android:layout_alignParentBottom="true"            android:background="#66000000"            android:gravity="center_horizontal"            android:orientation="vertical"            android:padding="5dp" >            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:singleLine="true"                android:text="和谐社会,和谐社会,和谐社会,和谐社会"                android:textColor="@android:color/white" />            <LinearLayout                android:id="@+id/ll_point_container"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="5dp"                android:orientation="horizontal" >            </LinearLayout>        </LinearLayout>    </RelativeLayout></RelativeLayout>

运行项目,出现下面错误:

09-28 09:08:44.032: E/AndroidRuntime(5794): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wuyudong.viewpager/com.wuyudong.viewpager.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class android.support.v4.view.ViewPager

ViewPager是个很好很强大的控件,很多应用用它来实现很酷的效果,但是很多情况下在运行时会遇到Error inflating class android.support.v4.view.ViewPager这个问题,

这个问题的解决方法很简单:右键项目选择Build Path ->Configure Build Path,然后选择Order and export 选项.置顶android-support-v4.jar并且将该选项勾上,然后Clean下项目,重新编译问题就解决了~

接着编写逻辑代码:

package com.wuyudong.viewpager;import java.util.ArrayList;import android.os.Bundle;import android.app.Activity;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;public class MainActivity extends Activity {    private ViewPager viewPager;    private int[] imageResIds;    private ArrayList<ImageView> imageViewList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 初始化布局 View 视图        initViews();        // Model 数据        initData();        // Controller 控制器        initAdapter();    }    private void initViews() {        viewPager = (ViewPager) findViewById(R.id.viewpager);        imageResIds = new int[] { R.drawable.a, R.drawable.b, R.drawable.c,                R.drawable.d, R.drawable.e };        imageViewList = new ArrayList<ImageView>();        ImageView imageView;        for (int i = 0; i < imageResIds.length; i++) {            imageView = new ImageView(this);            imageView.setBackgroundResource(imageResIds[i]);            imageViewList.add(imageView);        }    }    private void initAdapter() {        //    }    private void initData() {        // 初始化要显示的数据        viewPager.setAdapter(new MyAdapter());    }    class MyAdapter extends PagerAdapter {        @Override        public int getCount() {            return imageViewList.size();        }        // 3、指定复用的判断逻辑        @Override        public boolean isViewFromObject(View view, Object object) {            // 当滑到新的条目,又返回来,view是否可以被复用            return view == object;        }        // 1、返回要显示的条目内容,创建条目        @Override        public Object instantiateItem(ViewGroup container, int position) {            // container:容器:ViewPager            // position:当前要显示的条目的位置            ImageView imageView = imageViewList.get(position);            // a、把view对象添加到container中            container.addView(imageView);            // b、把view对象返回给框架,适配器            return imageView; // 必须要重写,否则抛异常        }        // 2、销毁条目        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            // object 要销毁的对象            container.removeView((View) object);        }    }}

运行项目后效果如下:

技术分享

Android自定义控件5--轮播图广告ViewPager基本实现