zoukankan      html  css  js  c++  java
  • 图片循环滑动

     1 <RelativeLayout 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     <android.support.v4.view.ViewPager
     8         android:id="@+id/viewpager"
     9         android:layout_width="match_parent"
    10         android:layout_height="200dp" />
    11 
    12     <LinearLayout
    13         android:layout_width="match_parent"
    14         android:layout_height="wrap_content"
    15         android:layout_alignBottom="@id/viewpager"
    16         android:background="#33000000"
    17         android:orientation="vertical" >
    18 
    19         <!-- 滑动图片下面的文字 -->
    20         <TextView
    21             android:id="@+id/image_desc"
    22             android:layout_width="match_parent"
    23             android:layout_height="wrap_content"
    24             android:gravity="center"
    25             android:text="@string/app_name"
    26             android:textColor="@android:color/white"
    27             android:textSize="18sp" />
    28 
    29         <!-- ..... -->
    30         <LinearLayout
    31             android:id="@+id/point_group"
    32             android:orientation="horizontal"
    33             android:layout_width="wrap_content"
    34             android:layout_gravity="center_horizontal"
    35             android:layout_height="wrap_content" >
    36         </LinearLayout>
    37         
    38     </LinearLayout>
    39 
    40 </RelativeLayout>
      1 package com.example.testdemo;
      2 
      3 import java.util.ArrayList;
      4 import android.app.Activity;
      5 import android.os.Bundle;
      6 import android.os.Handler;
      7 import android.support.v4.view.PagerAdapter;
      8 import android.support.v4.view.ViewPager;
      9 import android.support.v4.view.ViewPager.OnPageChangeListener;
     10 import android.view.View;
     11 import android.view.ViewGroup;
     12 import android.widget.ImageView;
     13 import android.widget.LinearLayout;
     14 import android.widget.TextView;
     15 
     16 public class MainActivity extends Activity {
     17 
     18     private ViewPager viewPager;
     19     private LinearLayout pointGroup;
     20     private TextView iamgeDesc;
     21     private ArrayList<ImageView> imageList;
     22     // 上一个页面的位置
     23     protected int lastPosition;
     24     // 判断是否自动滚动
     25     private boolean isRunning = false;
     26 
     27     // 图片资源ID
     28     private final int[] imageIds = { R.drawable.a, R.drawable.b, R.drawable.c,
     29             R.drawable.d, R.drawable.e };
     30 
     31     // 图片标题集合
     32     private final String[] imageDescriptions = { "巩俐不低俗,我就不能低俗",
     33             "扑树又回来啦!再唱经典老歌引万人大合唱", "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" };
     34 
     35     @Override
     36     protected void onCreate(Bundle savedInstanceState) {
     37         super.onCreate(savedInstanceState);
     38         setContentView(R.layout.activity_main);
     39 
     40         viewPager = (ViewPager) findViewById(R.id.viewpager);
     41         pointGroup = (LinearLayout) findViewById(R.id.point_group);
     42         iamgeDesc = (TextView) findViewById(R.id.image_desc);
     43         iamgeDesc.setText(imageDescriptions[0]);
     44 
     45         imageList = new ArrayList<ImageView>();
     46         for (int i = 0; i < imageIds.length; i++) {
     47 
     48             // 初始化图片资源
     49             ImageView image = new ImageView(this);
     50             image.setBackgroundResource(imageIds[i]);
     51             imageList.add(image);
     52 
     53             // 添加指示点
     54             ImageView point = new ImageView(this);
     55             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
     56                     LinearLayout.LayoutParams.WRAP_CONTENT,
     57                     LinearLayout.LayoutParams.WRAP_CONTENT);
     58 
     59             params.rightMargin = 20;
     60             point.setLayoutParams(params);
     61 
     62             point.setBackgroundResource(R.drawable.point_bg);
     63             if (i == 0) {
     64                 point.setEnabled(true);
     65             } else {
     66                 point.setEnabled(false);
     67             }
     68             pointGroup.addView(point);
     69         }
     70 
     71         viewPager.setAdapter(new MyPagerAdapter());
     72 
     73         // viewPager.setCurrentItem(Integer.MAX_VALUE/2 -
     74         // (Integer.MAX_VALUE/2%imageList.size())) ;
     75 
     76         viewPager.setOnPageChangeListener(new OnPageChangeListener() {
     77 
     78             @Override
     79             /**
     80              * 页面切换后调用 
     81              * position  新的页面位置
     82              */
     83             public void onPageSelected(int position) {
     84 
     85                 position = position % imageList.size();
     86 
     87                 // 设置文字描述内容
     88                 iamgeDesc.setText(imageDescriptions[position]);
     89 
     90                 // 改变指示点的状态
     91                 // 把当前点enbale 为true
     92                 pointGroup.getChildAt(position).setEnabled(true);
     93                 // 把上一个点设为false
     94                 pointGroup.getChildAt(lastPosition).setEnabled(false);
     95                 lastPosition = position;
     96 
     97             }
     98 
     99             @Override
    100             /**
    101              * 页面正在滑动的时候,回调
    102              */
    103             public void onPageScrolled(int position, float positionOffset,
    104                     int positionOffsetPixels) {
    105             }
    106 
    107             @Override
    108             /**
    109              * 当页面状态发生变化的时候,回调
    110              */
    111             public void onPageScrollStateChanged(int state) {
    112 
    113             }
    114         });
    115 
    116         /*
    117          * 自动循环: 1、定时器:Timer 2、开子线程 while true 循环 3、ColckManager 4、 用handler
    118          * 发送延时信息,实现循环
    119          */
    120         isRunning = true;
    121         // handler.sendEmptyMessageDelayed(0, 2000);
    122     }
    123 
    124     private Handler handler = new Handler() {
    125         public void handleMessage(android.os.Message msg) {
    126             // 让viewPager 滑动到下一页
    127             viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
    128             if (isRunning) {
    129                 handler.sendEmptyMessageDelayed(0, 2000);
    130             }
    131         };
    132     };
    133 
    134     protected void onDestroy() {
    135         isRunning = false;
    136     };
    137 
    138     private class MyPagerAdapter extends PagerAdapter {
    139 
    140         @Override
    141         // 获得页面的总数
    142         public int getCount() {
    143             return Integer.MAX_VALUE;
    144         }
    145 
    146         @Override
    147         /**
    148          * 获得相应位置上的view
    149          * container  view的容器,其实就是viewpager自身
    150          * position     相应的位置
    151          */
    152         public Object instantiateItem(ViewGroup container, int position) {
    153             System.out.println("instantiateItem  ::" + position);
    154             // 给 container 添加一个view
    155             container.addView(imageList.get(position % imageList.size()));
    156             // 返回一个和该view相对的object
    157             return imageList.get(position % imageList.size());
    158         }
    159 
    160         @Override  // 判断 view和object的对应关系
    161         public boolean isViewFromObject(View view, Object object) {
    162             if (view == object) {
    163                 return true;
    164             } else {
    165                 return false;
    166             }
    167         }
    168 
    169         @Override  // 销毁对应位置上的object
    170         public void destroyItem(ViewGroup container, int position, Object object) {
    171             System.out.println("destroyItem  ::" + position);
    172             container.removeView((View) object);
    173             object = null;
    174         }
    175     }
    176 
    177 }
  • 相关阅读:
    ActiveX控件的注册和反注册
    谷歌浏览器调用activex控件方法
    VC 中的ATL ActiveX 和 MFC ActiveX 有什么区别
    DirectX介绍(转)
    最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)(转)
    统计Visual Studio项目的代码行数
    【Sqlite3】sqlite_sequence表(转)
    linuxunix系统下的字符操作
    tif
    字符串截取
  • 原文地址:https://www.cnblogs.com/androidsj/p/3992846.html
Copyright © 2011-2022 走看看