zoukankan      html  css  js  c++  java
  • Android ImageSwitcher

    Overview

    ViewSwitcher that switches between two ImageViews when a new image is set on it. The views added to an ImageSwitcher must all be ImageViews.

    当一个新的视图被添加进来,视图控制器负责两个视图之间的切换,添加进ImageSwitcher,的视图必须是ImageViwe。

    常用方法

    • setFactory(ViewSwitcher.ViewFactory factory) 设置视图工厂必须要调用
    • setImageResource(int resId) 设置ImageSwitcher选中的照片,在切换图片时候使用

    关于ImageSwitcher的原理可以参考:泡在网上的日子

    一个 Demo

    用到的到的知识点

    • ImageSwither 的使用
    • Gallery 的使用
    • 简单的补间动画

    Note: 这里是指使用了Gallery的监听事件来控制ImageSwitcher图片的变化,没有添加ImageSwitcher手势操作。。。看来我真是太懒。

    public class HomeActivity extends AppCompatActivity implements ViewSwitcher.ViewFactory, AdapterView.OnItemSelectedListener {
    
        private Gallery gallery;    //画廊控件
        private List<Integer> drawableIdList;  //图片的集合
        private ImageSwitcher switcher; //图片切换器控件
    
    
        /**
         * 拿到我们想要的控件
         */
        private void initFindView() {
            switcher = (ImageSwitcher) this.findViewById(R.id.isImage);
            gallery = (Gallery) this.findViewById(R.id.gallery);
        }
    
        /**
         * 添加一些View
         */
        private void initData() {
            drawableIdList = new ArrayList<Integer>();
            drawableIdList.add(R.drawable.pet1);
            drawableIdList.add(R.drawable.pet2);
            drawableIdList.add(R.drawable.pet3);
            drawableIdList.add(R.drawable.pet4);
            drawableIdList.add(R.drawable.pet5);
            drawableIdList.add(R.drawable.pet6);
            drawableIdList.add(R.drawable.pet7);
            drawableIdList.add(R.drawable.pet8);
            drawableIdList.add(R.drawable.pet9);
    		//这个Adapter就是一个简单的Adapter用来生产图片
            GalleryImageAdapter adapter = new GalleryImageAdapter(this, this.drawableIdList);
            this.gallery.setAdapter(adapter);
        }
    
        /**
         * 初始化 ImageSwithcher
         */
        private void initSwitcher() {
            this.switcher.setFactory(this);
        }
    
        /**
         * 初始化简单的淡入淡出的动画.
         */
        private void initAnimation() {
            //图片进入时候的动画
            AlphaAnimation inAlphaAnimation = new AlphaAnimation(0.0f, 1.0f);
            inAlphaAnimation.setDuration(2000);
            //图片退出时候的动画
            AlphaAnimation outApphaAnimation = new AlphaAnimation(1.0f, 0f);
            outApphaAnimation.setDuration(2000);
    		//设置动画
            this.switcher.setInAnimation(inAlphaAnimation);
            this.switcher.setOutAnimation(outApphaAnimation);
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
    
            switcher.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    return false;
                }
            });
    
            initFindView();
            initData();
            initSwitcher();
            initAnimation();
    
            this.gallery.setOnItemSelectedListener(this);
        }
    
        /**
         * 实现 ViewSwitcher.ViewFactory 接口的方法,此方法中只需要返回一个ImageView即可
         * note: 只能返回ImageView
         * */
        @Override
        public View makeView() {
            ImageView imageView = new ImageView(this);
            return imageView;
        }
    
        /**
         * Gallery 的Item的选中事件
         * */
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            //设置ImageSwitcher 显示的照片
            this.switcher.setImageResource(this.drawableIdList.get(i));
        }
        /**
         * 因为没有用到此事件所以空实现他
         * */
        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
            return;
        }
    }
    
    
  • 相关阅读:
    PS 色调——颜色运算
    [ExtJS5学习笔记]第二十二节 Extjs5中使用beforeLabelTpl配置给标签增加必填选项星号标志
    [ExtJS5学习笔记]第二十一节 Extjs5中使用config配置给ext.widget或者create方法传递参数
    PS 滤镜——素描算法(一)
    [ExtJS5学习笔记]第二十节 Extjs5配合数组的push方法,动态创建并加载组件
    [ExtJS5学习笔记]第十九节 Extjs5中通过设置form.Panel的FieldSet集合属性控制多个field集合
    【翻译】Ext JS最新技巧——2014-9-10
    Ext JS 5的声明式事件监听
    BZOJ_3477_[Usaco2014 Mar]Sabotage_二分答案
    BZOJ_3012_[Usaco2012 Dec]First!_trie树+拓扑排序
  • 原文地址:https://www.cnblogs.com/slyfox/p/7373938.html
Copyright © 2011-2022 走看看