zoukankan      html  css  js  c++  java
  • ViewPager欢迎界面

    一、几张图片组成欢迎界面 下方有几个点对应每个图片 当图片被选中时对应的点会变亮,当对应的点被点击时也会切换到指定画面

    以下是代码

      1 package com.example.viewpager_1;
      2 
      3 import java.util.ArrayList;
      4 import java.util.List;
      5 
      6 import android.app.Activity;
      7 import android.os.Bundle;
      8 import android.support.v4.view.PagerAdapter;
      9 import android.support.v4.view.ViewPager;
     10 import android.support.v4.view.ViewPager.OnPageChangeListener;
     11 import android.view.View;
     12 import android.view.ViewGroup;
     13 
     14 import android.widget.ImageView;
     15 import android.widget.ImageView.ScaleType;
     16 import android.widget.LinearLayout;
     17 import android.widget.LinearLayout.LayoutParams;
     18 import android.widget.Toast;
     19 
     20 public class MainActivity extends Activity {
     21 
     22     private ViewPager vPager;
     23     private List<ImageView> views;//ViewPager中显示的所有页面,PagerAdapter使用的数据源
     24     private PagerAdapter adapter;
     25     
     26     private LinearLayout navLayout;//导航布局空间
     27     
     28     private LinearLayout.LayoutParams layoutParams;//线性布局中子控件使用的布局参数,作用设置子控件大小,外边距 
     29     
     30     
     31     @Override
     32     protected void onCreate(Bundle savedInstanceState) {
     33         super.onCreate(savedInstanceState);
     34         setContentView(R.layout.activity_main);
     35         navLayout = (LinearLayout) findViewById(R.id.navLayouttId);
     36         
     37         vPager = (ViewPager) findViewById(R.id.viewPager);
     38         
     39         inintViews();//初始化显示的页面
     40         //设置viewpager的页面滑动事件
     41         vPager.setOnPageChangeListener(new OnPageChangeListener() {
     42             @Override
     43             public void onPageSelected(int position) {
     44                 // 指定的位置的页面被选择
     45                 selectNav(position);
     46             }
     47             
     48             private void selectNav(int position) {
     49                 // 选择指定位置的导航图片为选择图片,选择的图片要重置一下
     50                 ImageView navImg  = null;
     51                 //遍历 导航布局中所有的子控件,判断子控件的位置是否为选择位置,若是,则改变图片的内容
     52                 for(int i=0;i<navLayout.getChildCount();i++){
     53                     navImg = (ImageView) navLayout.getChildAt(i );//获取布局中指定位置的子控件
     54                     if(i==position)
     55                         navImg.setImageResource(R.drawable.page_now);
     56                     else
     57                         navImg.setImageResource(R.drawable.page);
     58                 }
     59             }
     60             /*
     61              * 第一个参数: 滚动页面开始的位置
     62              * 第二个参数:  两个页面之间滚动的偏移量,范围是0-1
     63              * 第三个参数:两个页面之间滚动的像素偏移量
     64              */
     65             @Override
     66             public void onPageScrolled(int position, float offset, int offsetPixels) {
     67                 // TODO 从当前页面位置开始滚动事件
     68             }
     69             
     70             @Override
     71             public void onPageScrollStateChanged(int state) {
     72                 // 页面滚动状态发生变化时事件: 开始滚动,停止滚动,正在设置页面
     73 //                ViewPager.SCROLL_STATE_DRAGGING 开始滚动
     74 //                ViewPager.SCROLL_STATE_IDLE 停止滚动
     75 //                ViewPager.SCROLL_STATE_SETTLING 正在设置页面,即将要停止,并且设置当前的页面
     76                 
     77                 switch (state) {
     78                 case ViewPager.SCROLL_STATE_DRAGGING:
     79                     break;
     80                 case ViewPager.SCROLL_STATE_IDLE:
     81                     break;
     82                 case ViewPager.SCROLL_STATE_SETTLING:
     83                     break;
     84                 default:
     85                     break;
     86                 }
     87             }
     88         });
     89     }
     90     private void inintViews() {
     91         // TODO 加载viewpager中显示的额页面
     92         views = new ArrayList<ImageView>();
     93         ImageView imgView = null;
     94         ImageView navImg = null;
     95         layoutParams =    new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
     96         layoutParams.leftMargin=20;
     97         layoutParams.rightMargin=20;//px
     98         for(int i=1;i<=3;i++){
     99             //实例化viewpager中要显示图片的空间
    100             imgView = new ImageView(getApplicationContext());
    101             imgView.setScaleType(ScaleType.CENTER_CROP);
    102             
    103             //根据资源名和类型获取 这一资源的标示 -->R.drawable.slide1
    104             int resId = getResources().getIdentifier("slide"+i, "drawable", getPackageName());
    105             imgView.setImageResource(resId);//设置图片控件显示的图片资源
    106             if(i==3){
    107                 imgView.setOnClickListener(new View.OnClickListener() {
    108                     @Override
    109                     public void onClick(View v) {
    110                         Toast.makeText(getApplicationContext(), "正在跳转。。。。", 0).show();
    111                     }
    112                 });
    113             }
    114             views.add(imgView);//将实例化的空间添加到数据源中。
    115             
    116             navImg = new ImageView(getApplicationContext());
    117             navImg.setScaleType(ScaleType.CENTER_CROP);
    118             if(i==1)
    119                 navImg.setImageResource(R.drawable.page_now);
    120             else
    121                 navImg.setImageResource(R.drawable.page);
    122             
    123             //设置导航图片的标签: 当前导航图片的位置
    124             navImg.setTag(i-1);
    125             navImg.setOnClickListener(new View.OnClickListener() {
    126                 @Override
    127                 public void onClick(View v) {
    128                     // 点击导航图片的事件方法: 读取图片控件中的标签,转化为与ViewPager页面对应的位置,最后选择页面
    129                     int position = (Integer) v.getTag();
    130                     vPager.setCurrentItem(position);//切换viewpager显示的位置
    131                 }
    132             });
    133             navLayout.addView(navImg,layoutParams);
    134         }
    135         //实例化PagerAdapter适配器
    136         adapter = new WelcomePagerAdapter();
    137         vPager.setAdapter(adapter);
    138         //设置移除UI的间隔大小
    139 //        vPager.setOffscreenPageLimit(3);//默认值不能小于1,建议不要 改变默认值。
    140     }
    141     //声明PagerAdapter的子类,用于管理ViewPager中显示的View控件
    142     class WelcomePagerAdapter extends PagerAdapter{
    143         @Override
    144         public int getCount() {
    145             // TODO 显示返回页面的总大小
    146             return views.size();
    147         }
    148         @Override
    149         public Object instantiateItem(ViewGroup container, int position) {
    150             // TODO 获取指定位置的view,并增加到ViewPager中,同时作为当前页面的数据返回
    151             container.addView(views.get(position));
    152             return views.get(position);//作为当前页面的数据返回 
    153         }
    154         @Override
    155         public void destroyItem(ViewGroup container, int position, Object object) {
    156             // TODO 当前 位置与viewpager当中正显示页面的位置的间隔超出了一页时,需要将当前
    157             //位置的页面移除掉.同时 实例化三个页面
    158             container.removeView(views.get(position));
    159         }
    160         //固定写法;
    161         @Override
    162         public boolean isViewFromObject(View arg0, Object arg1) {
    163             // TODO 判断当前显示的页面的UI对象和数据对象是否 一致
    164             
    165             return arg0==arg1;
    166         }
    167     }
    168 }
    MainActivity.java
     1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     tools:context=".MainActivity" >
     6 
     7     <!-- 使用v4包下的可左右滑动的控件,其显示的页面需要通过PagerAdapter适配器增加或移除 -->
     8 
     9     <android.support.v4.view.ViewPager
    10         android:id="@+id/viewPager"
    11         android:layout_width="match_parent"
    12         android:layout_height="match_parent" />
    13 
    14     <!-- 导航小图片所在的布局 -->
    15     <LinearLayout
    16         android:id="@+id/navLayoutId"
    17         android:layout_width="match_parent"
    18         android:layout_height="wrap_content"
    19         android:layout_gravity="bottom"
    20         android:layout_marginBottom="10dp"
    21         android:background="#4000"
    22         android:gravity="center"
    23         android:orientation="horizontal"
    24         android:padding="20dp" />
    25 
    26 </FrameLayout>
    activity_main.xml

    效果图

  • 相关阅读:
    Digital Video Stabilization and Rolling Shutter Correction using Gyroscope 论文笔记
    Distortion-Free Wide-Angle Portraits on Camera Phones 论文笔记
    Panorama Stitching on Mobile
    Natural Image Stitching with the Global Similarity Prior 论文笔记 (三)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(二)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(一)
    ADCensus Stereo Matching 笔记
    Efficient Large-Scale Stereo Matching论文解析
    Setting up caffe on Ubuntu
    Kubernetes配置Secret访问Harbor私有镜像仓库
  • 原文地址:https://www.cnblogs.com/bimingcong/p/4817855.html
Copyright © 2011-2022 走看看