Android:ViewPager制作幻灯片

news/2024/7/7 16:10:18

最近在项目中用到图片轮播,试了Gallery,ViewFlipper,ViewPager,感觉Gallery最符合需求,但是Gallery的系统边框很难看,项目中要求用自己的背景图片。

接下来用viewpager来做幻灯片效果。

<?xml version="1.0" encoding="utf-8"?>
   
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    >
    <android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    >
</android.support.v4.view.ViewPager>
    <LinearLayout 
    android:id="@+id/pointgroup"
    android:layout_width="match_parent"
    android:layout_height="10dp"
    android:orientation="horizontal"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="5dp"
    android:gravity="center"
    >
    
</LinearLayout>
</RelativeLayout>
复制代码

程序:

复制代码
public class MainActivity extends Activity {
    //ViewPager 
        private ViewPager viewpager;    
        //幻灯片图片资源
        private int [] imgArray={R.drawable.view1,R.drawable.view2,R.drawable.view3};
        //图片数组
        private ArrayList<View> viewlist;

        private ImageView imageView;
        //点点
        private ViewGroup pointgroup;
        private ImageView[] pointarr;
        

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_viewpage);
            //初始化
            viewpager =(ViewPager) findViewById(R.id.viewpager);
            pointgroup =(ViewGroup) findViewById(R.id.pointgroup);
            viewlist = new ArrayList<View>();
            
            //将图片装载到数组    
            for(int i=0;i<imgArray.length;i++){
                imageView =new ImageView(this);
                //设置图片
                imageView.setBackgroundResource(imgArray[i]);
                //设置图片id
                imageView.setId(imgArray[i]);
                viewlist.add(imageView);
                
            }
            
            /*
             * viewpager加载适配器
             * MyPageAdapter为自定义适配器
             * */
            
            //传递上下文
            Context context = MainActivity.this;
            MyPageAdapter pageadapter2 =new MyPageAdapter(viewlist,context);
            viewpager.setAdapter(pageadapter2);        
            
            
            //点数组
            pointarr=new ImageView[imgArray.length];
            //把点加入布局,和设置点状态
            for(int i=0;i<imgArray.length;i++){
                ImageView point=new ImageView(this);        
                
                //设置点大小
                point.setLayoutParams(new LayoutParams(10,10)); 
                pointarr[i]=point;
                //状态处理
                if(i==0){
                    pointarr[i].setBackgroundResource(R.drawable.viewpage_point_focused);
                }else{
                    pointarr[i].setBackgroundResource(R.drawable.viewpage_point_unfocused);
                }
                //加入到容器
                pointgroup.addView(pointarr[i]);
            }
            
        
            //viewpager设置监听器
            pointChangeListener pointListener=new pointChangeListener();
            viewpager.setOnPageChangeListener(pointListener);
            //点击图片
            
            
            
        }
            
        
        /*
         * viewpage监听器
         */
        
        public class pointChangeListener implements OnPageChangeListener{

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub
                
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub
                
            }

            @Override
            //比如切换到第二张图片,相应索引的点为选择状态,其他为未选中状态
            public void onPageSelected(int arg0) {
                
                // TODO Auto-generated method stub
                for(int i=0;i<pointarr.length;i++){
                    pointarr[arg0].setBackgroundResource(R.drawable.viewpage_point_focused);    
                    if(arg0 !=i){
                    pointarr[i].setBackgroundResource(R.drawable.viewpage_point_unfocused);    
                    }
                }
                
            }
            
            
        }
        

        
    }
复制代码

自定义适配器:

复制代码
public class MyPageAdapter extends PagerAdapter {
    private List<View> viewlist;
    private Context context;
    public MyPageAdapter(List<View> viewlist,Context context){
        this.viewlist =viewlist;
        this.context=context;
    }
    
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return viewlist.size();
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0==arg1;
    }
    
    //以下也是必要方法,不过要自己添加
    //实例化
    
    @Override
    public Object instantiateItem(View container, int position) {
        // TODO Auto-generated method stub
        ((ViewPager)container).addView(viewlist.get(position));
        View view =viewlist.get(position);
        view.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int i =v.getId();
                String t="你点击了图片的图片id为:"+i;
                Toast.makeText(context, t, Toast.LENGTH_LONG).show();
                
                /*跳转页面
                *Intent intent =new Intent(context,NavigationActivity.class);
                *context.startActivity(intent); 
                 */ 
            
            }
            
        });
        return viewlist.get(position);                
    }
     

    //销毁
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        container.removeView(viewlist.get(position));
    }
    
    

}

http://www.niftyadmin.cn/n/3649525.html

相关文章

建站分享:WordPress自定义网站背景图片

▣ 博主主站地址&#xff1a;微笑涛声 【www.cztcms.cn】 ▣ 博主其他平台&#xff1a; CSDN 简书 开源中国 思否 华为云博客 我的博客从上线到现在&#xff0c;网站背景一直是纯色的。突然想把背景改为图片。好在WordPress自定义背景图片比价简单。 1、找到正在使用的主题的…

建站分享:Gitee+PicGo 搭建Markdown图床

图床是干什么的&#xff1f; 图床就是一个便于在博文中插入在线图片连接的个人图片仓库。设置图床之后&#xff0c;在自己博客中插入的图片链接就可以随时随地在线预览了&#xff0c;并且不会因为任何意外原因无法查看&#xff0c;除非自己亲自删除。 ▣ 博主主站地址&#xff…

Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

转载请注明出处&#xff1a;http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中&#xff0c;当时微信推出二维码扫描功能&#xff0c;自己感觉挺新颖的&#xff0c;从一张图片中扫一下竟然能直接加好友&#xff0c;不可思议啊&#xff…

容器和Kubernetes入门:DigitalOcean工作坊套件

Getting Started with Containers and Kubernetes Workshop Kit Materials容器和Kubernetes Workshop Kit材料入门 This meetup kit is designed to help a technical audience become familiar with core Kubernetes concepts and practices. 该见面工具包旨在帮助技术读者熟悉…

体验一次Mac Win10主题——Win10美化之路

MAC Win10主题——Win10美化之路 偶遇致美化 一次偶然的机会&#xff0c;在网上看到了致美化 这个网站&#xff0c;好奇怎样给Windows 10换主题。Windows系统的界面风格虽然比较高效。不过UI界面是真的不好看。在网站找了半天&#xff0c;找到一个免费的Mac Win10主题。看了介绍…

[Domino]Java访问Domino R5必需配置的服务器设置

[Domino]Java访问Domino R5必需配置的服务器设置编写者日期关键词郑昀ultrapower2005-6-30Java Domino Configuration访问的Domino R5服务器必须配置本文讲述的四个设置&#xff0c;否则会Domino R5Domino R6下面列出需要配置的四个安全设置。DIIOP请您检查Domino Server的DIIO…

Android ListView滑动过程中图片显示重复错乱闪烁问题解决

主要分析Android ListView滚动过程中图片显示重复、错乱、闪烁的原因及解决方法&#xff0c;顺带提及ListView的缓存机制。 1、原因分析 ListView item缓存机制&#xff1a;为了使得性能更优&#xff0c;ListView会缓存行item(某行对应的View)。ListView通过adapter的getView函…