图片轮播是类似知乎日报上的一个轮播效果,如下图。

 

android 图片文字轮播效果(图片和文字自动滚动)_第1张图片

 

 

 

好了直接进入正题,首先是出示一下效果:

 

android 图片文字轮播效果(图片和文字自动滚动)_第2张图片

 

MainActivity:

 

import java.util.ArrayList;import java.util.List;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;import android.os.Bundle;import android.app.Activity;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.ImageView.ScaleType;import android.widget.LinearLayout;import android.widget.TextView;public class MainActivity extends Activity {    //viewpager    private ViewPager view_pager;    private LinearLayout ll_dotGroup;    private TextView newsTitle;    private int imgResIds[] = new int[]{R.drawable.a, R.drawable.b,            R.drawable.c, R.drawable.d, R.drawable.b};    //存储5张图片    private String textview[]=new String[]{"12412515125","fawfafawf"            ,"13f1f12f211","1251f1f12","1t1f12f121"};    //存储5个目录    private int curIndex = 0;    //用来记录当前滚动的位置    PicsAdapter picsAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        setViewPager();    }    private void setViewPager() {        newsTitle=(TextView)findViewById(R.id.NewsTitle);        view_pager = (ViewPager) findViewById(R.id.view_pager);        ll_dotGroup = (LinearLayout) findViewById(R.id.dotgroup);        picsAdapter = new PicsAdapter(); // 创建适配器        picsAdapter.setData(imgResIds);        view_pager.setAdapter(picsAdapter); // 设置适配器        view_pager.setOnPageChangeListener(new MyPageChangeListener()); //设置页面切换监听器        initPoints(imgResIds.length); // 初始化图片小圆点        startAutoScroll(); // 开启自动播放    }    // 初始化图片轮播的小圆点和目录    private void initPoints(int count) {        for (int i = 0; i < count; i++) {            ImageView iv = new ImageView(this);            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(                    20, 20);            params.setMargins(0, 0, 20, 0);            iv.setLayoutParams(params);            iv.setImageResource(R.drawable.dot1);            ll_dotGroup.addView(iv);        }        ((ImageView) ll_dotGroup.getChildAt(curIndex))                .setImageResource(R.drawable.dot2);        newsTitle.setText(textview[curIndex]);    }    // 自动播放    private void startAutoScroll() {        ScheduledExecutorService scheduledExecutorService = Executors                .newSingleThreadScheduledExecutor();        // 每隔4秒钟切换一张图片        scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(), 5,                4, TimeUnit.SECONDS);    }    // 切换图片任务    private class ViewPagerTask implements Runnable {        @Override        public void run() {            runOnUiThread(new Runnable() {                @Override                public void run() {                    int count = picsAdapter.getCount();                    view_pager.setCurrentItem((curIndex + 1) % count);                }            });        }    }    // 定义ViewPager控件页面切换监听器    class MyPageChangeListener implements OnPageChangeListener {        @Override        public void onPageScrolled(int position, float positionOffset,                                   int positionOffsetPixels) {        }        @Override        public void onPageSelected(int position) {            ImageView imageView1 = (ImageView) ll_dotGroup.getChildAt(position);            ImageView imageView2 = (ImageView) ll_dotGroup.getChildAt(curIndex);            if (imageView1 != null) {                imageView1.setImageResource(R.drawable.dot2);            }            if (imageView2 != null) {                imageView2.setImageResource(R.drawable.dot1);            }            curIndex = position;            newsTitle.setText(textview[curIndex]);        }        boolean b = false;        @Override        public void onPageScrollStateChanged(int state) {            //这段代码可不加,主要功能是实现切换到末尾后返回到第一张            switch (state) {                case 1:// 手势滑动                    b = false;                    break;                case 2:// 界面切换中                    b = true;                    break;                case 0:// 滑动结束,即切换完毕或者加载完毕                    // 当前为最后一张,此时从右向左滑,则切换到第一张                    if (view_pager.getCurrentItem() == view_pager.getAdapter()                            .getCount() - 1 && !b) {                        view_pager.setCurrentItem(0);                    }                    // 当前为第一张,此时从左向右滑,则切换到最后一张                    else if (view_pager.getCurrentItem() == 0 && !b) {                        view_pager.setCurrentItem(view_pager.getAdapter()                                .getCount() - 1);                    }                    break;                default:                    break;            }        }    }    // 定义ViewPager控件适配器    class PicsAdapter extends PagerAdapter {        private List views = new ArrayList();        @Override        public int getCount() {            if (views == null) {                return 0;            }            return views.size();        }        public void setData(int[] imgResIds) {            for (int i = 0; i < imgResIds.length; i++) {                ImageView iv = new ImageView(MainActivity.this);                ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(                        ViewGroup.LayoutParams.MATCH_PARENT,                        ViewGroup.LayoutParams.MATCH_PARENT);                iv.setLayoutParams(params);                iv.setScaleType(ScaleType.FIT_XY);                //设置ImageView的属性                iv.setImageResource(imgResIds[i]);                views.add(iv);            }        }        public Object getItem(int position) {            if (position < getCount())                return views.get(position);            return null;        }        @Override        public boolean isViewFromObject(View arg0, Object arg1) {            return arg0 == arg1;        }        @Override        public void destroyItem(View container, int position, Object object) {            if (position < views.size())                ((ViewPager) container).removeView(views.get(position));        }        @Override        public int getItemPosition(Object object) {            return views.indexOf(object);        }        @Override        public Object instantiateItem(View container, int position) {            if (position < views.size()) {                final ImageView imageView = views.get(position);                ((ViewPager) container).addView(imageView);                return views.get(position);            }            return null;        }    }}

 

 

 

activity_main:

 

                                                                

 

 

 

 

 

最后附上源码:http://download.csdn.net/detail/double2hao/9155675

 

 

 

本人博客,android均为新手,闻过则喜,望各位前辈不吝批评指点。

更多相关文章

  1. android 调用相机拍照 并缩放切割图片
  2. 如何在Activity调用surfaceView实现透明或半透明的效果
  3. TextView属性android:ellipsize实现跑马灯效果,TextView内容过长
  4. Android 中 drawTextOnPath 文字效果演示(中级)
  5. 图片缩放设置
  6. Android新姿势:3D翻转效果原理
  7. 我的Android进阶之旅------>Android利用温度传感器实现带动画效
  8. android 实现图片上传功能 Tomcat作为服务器

随机推荐

  1. 指针常量与常量指针举例说明
  2. C#是什么,能做些什么?
  3. C#与.net有什么关系
  4. 数据结构中散列表(哈希表)经典之冲突处理
  5. C语言如何获取进程ID?(代码实例)
  6. C和C ++之间的区别是什么
  7. c语言*p++是什么意思?
  8. .net和c#有什么区别
  9. C ++中continue和break语句的简单比较
  10. c语言计算两个数的最小公倍数