zoukankan      html  css  js  c++  java
  • viewpage轮播图

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
    
    
        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="160dp" >
    
            <androidx.viewpager.widget.ViewPager
                android:id="@+id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
    
            <LinearLayout
    
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_alignParentBottom="true"
                android:background="#66000000"
                android:gravity="center_horizontal"
                android:orientation="vertical"
                android:padding="5dp"
                app:layout_constraintBottom_toBottomOf="@+id/viewpager">
    
                <TextView
                    android:id="@+id/tv_desc"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:singleLine="true"
                    android:text="社会"
                    android:textColor="@android:color/white" />
                <LinearLayout
                    android:id="@+id/ll_point_container"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:orientation="horizontal"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent" />
    
            </LinearLayout>
    
        </androidx.constraintlayout.widget.ConstraintLayout>
    
    
    
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
    
    
        private ViewPager viewPager;
        private int[] imageResIds;
        private ArrayList<ImageView> imageViewList;
        private ArrayList<View> pointViews;
        private LinearLayout ll_point_container;
        private String[] contentDesc;
        private TextView tv_desc;
        private int lastEnablePoint = 0;
        private boolean isRunning = true;
        private  Handler handler;
        private Runnable runnable;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // 初始化布局 View 视图
            initViews();
    
            // Model 数据
            initData();
    
            // Controller 控制器
            initAdapter();
            //1.
             handler = new Handler();
           runnable= new Runnable() {
                @Override
                public void run() {
    
                    viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
                    handler.postDelayed(this, 2000);
                }
    
            };
    
           //2
    //        mTimer.schedule(mTimerTask, 2000, 2000);
           //3
    //        handler.postDelayed( runnable, 2000 );
            //开启轮询
    //        new Thread() {
    //            public void run() {
    //                while(isRunning) {
    //                    try {
    //                        Thread.sleep(2000);
    //                    } catch (InterruptedException e) {
    //                        e.printStackTrace();
    //                    }
    //                    //往下跳一位
    //                    runOnUiThread(new Runnable() {
    //                        @Override
    //                        public void run() {
    //                            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
    //                        }
    //                    });
    //                }
    //
    //            }
    //        }.start();
    
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            handler.removeCallbacksAndMessages( null );
    
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            handler.postDelayed( runnable, 2000 );
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            isRunning = false;
        }
    
        private void initViews() {
            viewPager = (ViewPager) findViewById(R.id.viewpager);
            viewPager.setOnPageChangeListener(this);// 设置滚动更新
    
            viewPager.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                        case MotionEvent.ACTION_MOVE:
                            handler.removeCallbacksAndMessages( null );
                            break;
                        case MotionEvent.ACTION_UP:
                            handler.postDelayed( runnable, 2000 );
                            break;
                    }
                    return false;
                }
            });
            tv_desc = (TextView) findViewById(R.id.tv_desc);
    
            ll_point_container =  findViewById(R.id.ll_point_container);
    
        }
    
        private void initAdapter() {
            ll_point_container.getChildAt(0).setEnabled(true);
            tv_desc.setText(contentDesc[0]);
            // 设置适配器
            viewPager.setAdapter(new MyAdapter());
    
            //默认设置到中间的某个位置
            int pos = Integer.MAX_VALUE / 2;
            //viewPager.setCurrentItem(pos - 3);
            viewPager.setCurrentItem(0);
        }
    
        private void initData() {
    
            // 初始化要显示的数据
            // 图片资源id数组
            imageResIds = new int[] { R.drawable.lunbo1, R.drawable.lunbo2, R.drawable.lunbo3,
                    R.drawable.lunbo4};
            // 文本描述
            contentDesc = new String[] { "巩俐不低俗,我就不能低俗", "朴树又回来啦!再唱经典老歌引万人大合唱",
                    "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" };
            imageViewList = new ArrayList<ImageView>();
            pointViews = new ArrayList<View>();
            ImageView imageView;
            View pointView;
            LinearLayout.LayoutParams layoutParams;
            for (int i = 0; i < imageResIds.length; i++) {
                imageView = new ImageView(this);
                imageView.setBackgroundResource(imageResIds[i]);
                imageViewList.add(imageView);
    
                // 加小白点,指示器
                pointView = new View(this);
                pointView.setBackgroundResource(R.drawable.select);
                layoutParams = new LinearLayout.LayoutParams(7, 7);
                if (i != 0) {
                    layoutParams.leftMargin = 10;
                }
                pointView.setEnabled(false);
    
                ll_point_container.addView(pointView, layoutParams);
            }
    
        }
    
        class MyAdapter extends PagerAdapter {
    
            @Override
            public int getCount() {
                return Integer.MAX_VALUE;
            }
    
            // 3、指定复用的判断逻辑
            @Override
            public boolean isViewFromObject(View view, Object object) {
                // 当滑到新的条目,又返回来,view是否可以被复用
                return view == object;
            }
    
            // 1、返回要显示的条目内容,创建条目
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                // container:容器:ViewPager
                // position:当前要显示的条目的位置
                position = position % 4;
    
                ImageView imageView = imageViewList.get(position);
    
                // a、把view对象添加到container中
                container.addView(imageView);
                // b、把view对象返回给框架,适配器
                return imageView; // 必须要重写,否则抛异常
            }
    
            // 2、销毁条目
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                // object 要销毁的对象
                container.removeView((View) object);
            }
    
        }
    
        @Override
        public void onPageScrolled(int position, float positionOffset,
                                   int positionOffsetPixels) {
    
            // 滚动时调用
        }
    
        @Override
        public void onPageSelected(int position) {
            // 新条目被选中时调用
            position = position % 4;
    
            tv_desc.setText(contentDesc[position]);
            // 把之前的禁用,把最新的启用
            ll_point_container.getChildAt(lastEnablePoint).setEnabled(false);
            ll_point_container.getChildAt(position).setEnabled(true);
            lastEnablePoint = position;
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
            // 滚动状态变化时调用
    
    
        }
    }
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
    
        <corners android:radius="5dp" />
        <solid android:color="@android:color/white" />
    
    </shape>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"  android:shape="oval" >
    
        <corners android:radius="5dp" />
        <solid android:color="@android:color/darker_gray" />
    
    </shape>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="true" android:drawable="@drawable/shap1"></item>
        <item android:state_enabled="false" android:drawable="@drawable/shap2"></item>
    </selector>
  • 相关阅读:
    命令行方式执行YUITest单元测试
    Rails系统重构:从单一复杂系统到多个小应用集群
    hudson部署设置 Spring——Java程序员的春天 ITeye技术网站
    java获取本机IP
    2.5.如何创建JAR以及把它安装到本地库中?
    管理员常用的管理工具有哪些?
    PHP学习之十四:构造函数
    window phone 7开发之 项目初体验
    window phone7开始之 横屏竖屏
    Silverlight 硬件加速
  • 原文地址:https://www.cnblogs.com/Ocean123123/p/13892147.html
Copyright © 2011-2022 走看看