zoukankan      html  css  js  c++  java
  • 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);
            }
    
        }
    }

    运行项目后效果如下:

  • 相关阅读:
    普通摄像头交互——视频翻书
    笔记本3K4K
    OOP(转)
    DllImport 和extern
    java串口通信 (转)
    HttpWatch截取网页数据的工具以及介绍
    在 resources 参数中指定了多次。 resources 参数不支持重复项—解决方法
    “设计”你的代码(转)
    如何获取ultraComboEditor选中的值
    将数组绑定到 ODP.NET 数据库命令
  • 原文地址:https://www.cnblogs.com/wuyudong/p/5918021.html
Copyright © 2011-2022 走看看