zoukankan      html  css  js  c++  java
  • ViewPager 滑动页(一)

    需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作;

    效果图:

    实现分析:

    1.目录结构:

    代码实现:

    1.fragment_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"
        tools:context="com.jjc.demo.MainActivity$PlaceholderFragment" >
    
        <com.jjc.demo.PosterView
            android:id="@+id/poster"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </RelativeLayout>

    2.view_poster.xml

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout 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" />
    
        <LinearLayout
            android:id="@+id/container"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:gravity="center"
            android:background="@android:color/transparent"
            android:orientation="horizontal" />
    
    </FrameLayout>

    3.item_poster.xml

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <ImageView
            android:id="@+id/image_pic"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop" />
    
    </FrameLayout>

    4.poster_point_selector.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_enabled="true"><bitmap android:src="@drawable/point_normal" />
        </item>
        <item android:state_enabled="false"><bitmap android:src="@drawable/point_select" />
        </item>
    
    </selector>

    5.PosterView.java

    package com.jjc.demo;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.content.Context;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.util.AttributeSet;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    
    public class PosterView extends FrameLayout{
        
        private Context context;
        private ViewPager viewPager;
        private LinearLayout container;
        
        private PosterAdapter adapter;
        
        private List<Integer> posterList = new ArrayList<Integer>();
        
        
        private ImageView imageView;
        // 底部小点的图片
        private ImageView[] points;
    
        // 记录当前选中位置
        private int currentIndex = 0;
    //    private int nextIndex;
        private int pageNum = 1;
        
        public PosterView(Context context) {
            this(context, null);
        }
        
        public PosterView(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.context = context;
            LayoutInflater.from(context).inflate(R.layout.view_poster, this, true);
            initView();
        }
    
        private void initView(){
            container = (LinearLayout) findViewById(R.id.container);
            viewPager = (ViewPager)findViewById(R.id.viewpager);
            viewPager.setOnPageChangeListener(new viewpagerListener());
            
            adapter = new PosterAdapter(context, posterList);
            viewPager.setAdapter(adapter);
        }
        
        /**
         * 刷新海报页数据;
         * @param list
         */
        public void refreshData(List<Integer> list){
            if(list == null || list.isEmpty()){
                return;
            }
            initPoint(list.size());
            
            posterList.clear();
            posterList.addAll(list);
            adapter.notifyDataSetChanged();
        }
        
        private void initPoint(int num){
            pageNum = num;
            container.removeAllViews();
            
            if(num == 0){
                return;
            }
            
            points = new ImageView[num];
            for (int i = 0; i < num; i++) {
                imageView = new ImageView(context);
                imageView.setBackgroundResource(R.drawable.poster_point_selector);
                
                LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(12, 12);
                mLayoutParams.rightMargin = 8;
                mLayoutParams.leftMargin = 8;
                mLayoutParams.topMargin = 24;
                mLayoutParams.bottomMargin = 28;
                
                points[i] = imageView;
                // 设置位置tag,方便取出与当前位置对应
                points[i].setTag(i);
                // 默认都设为灰色
                points[i].setEnabled(false);
                // 给每个小点设置监听
                points[i].setOnClickListener(new pointListener());
                container.addView(points[i], mLayoutParams);
            }
            // 设置为白色,即选中状态
            points[currentIndex].setEnabled(true);
        }
        
        private class viewpagerListener implements OnPageChangeListener {
    
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
    
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }
    
            @Override
            public void onPageSelected(int position) {
                // 设置底部小点选中状态
                setCurDot(position);
            }
        }
        
        private class pointListener implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                int position = (Integer) v.getTag();
                setCurView(position);
                setCurDot(position);
            }
        }
        
        /**
         * 设置当前页面的位置
         */
        private void setCurView(int position) {
            if (position < 0 || position >= pageNum) {
                return;
            }
            viewPager.setCurrentItem(position);
        }
        
        /**
         * 设置当前的小点的位置
         */
        private void setCurDot(int positon) {
            if (positon < 0 || positon > pageNum - 1 || currentIndex == positon) {
                return;
            }
            points[positon].setEnabled(true);
            points[currentIndex].setEnabled(false);
            currentIndex = positon;
        }
        
    }

    6.PosterAdapter.java

    package com.jjc.demo;
    
    import java.util.List;
    
    import android.content.Context;
    import android.support.v4.view.PagerAdapter;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    
    public class PosterAdapter extends PagerAdapter {
    
    //    private Context context;
        private List<Integer> posterList;
        
        private LayoutInflater inflater;
    
        public PosterAdapter(Context context, List<Integer> posterList) {
    //        this.context = context;
            this.posterList = posterList;
            inflater = LayoutInflater.from(context);
        }
    
        @Override
        public int getCount() {
            return posterList.isEmpty() ? 0 : posterList.size();
        }
    
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }
        
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            
            View view = container.findViewById(position);
            ViewHolder holder;
            
            if(view == null){
                holder = new ViewHolder();
                view = inflater.inflate(R.layout.item_poster, null);
                //为View设置标识符,可通过findViewById方法获取
                view.setId(position);
                holder.icon = (ImageView)view.findViewById(R.id.image_pic);
                container.addView(view);
                view.setTag(holder);
            }else{
                holder = (ViewHolder)view.getTag();
            }
            holder.icon.setImageResource(posterList.get(position));
            
            return view;
        }
        
        static class ViewHolder{
            ImageView icon;
        }
    }

    7.MainActivity.java

    package com.jjc.demo;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.support.v7.app.ActionBarActivity;
    import android.support.v4.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class MainActivity extends ActionBarActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            if (savedInstanceState == null) {
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.container, new PlaceholderFragment()).commit();
            }
        }
    
        /**
         * A placeholder fragment containing a simple view.
         */
        public static class PlaceholderFragment extends Fragment {
    
            private View rootView;
            private PosterView posterView;
    
            public PlaceholderFragment() {
            }
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
                rootView = inflater.inflate(R.layout.fragment_main, container, false);
                return rootView;
            }
            
            @Override
            public void onActivityCreated(Bundle savedInstanceState) {
                super.onActivityCreated(savedInstanceState);
                initView();
            }
    
            private void initView() {
                posterView = (PosterView)rootView.findViewById(R.id.poster);
                
    //            posterView.setBackgroundResource(R.drawable.poster_02);
                List<Integer> images = new ArrayList<Integer>();
                images.add(R.drawable.poster_01);
                images.add(R.drawable.poster_02);
                images.add(R.drawable.poster_03);
                images.add(R.drawable.poster_04);
                images.add(R.drawable.poster_05);
                posterView.refreshData(images);
                
            }
        }
    
    }

    代码:http://pan.baidu.com/s/1mgHWqrY

  • 相关阅读:
    8月3日云栖精选夜读:LSF-SCNN:一种基于CNN的短文本表达模型及相似度计算的全新优化模型
    linux(centos)下安装PHP的PDO扩展
    Linux中find常见用法示例
    01 编译原理概述
    20145221 《信息安全系统设计基础》第5周学习总结
    20145221 《信息安全系统设计基础》第4周学习总结
    爱春秋之戏说春秋 Writeup
    20145221 《信息安全系统设计基础》第3周学习总结
    20145221 《信息安全系统设计基础》第2周学习总结
    20145221 《信息安全系统设计基础》第1周学习总结
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/3958587.html
Copyright © 2011-2022 走看看