Android中viewSwitcher的使用

来源:互联网 发布:长春办公软件培训班 编辑:程序博客网 时间:2024/06/05 10:11

         用过手机淘宝的人,应该都有看到淘宝首页,中间的位置,有一个上下滚动的消息条幅。之前因为公司项目中有需要用到这种效果,所以就找了类似控件,发现了viewswitcher这个控件,主要是用于两个不同视图间的切换,附带相应的动画效果。比如:淘宝首页,淘宝头条那里的滚动滑出的特效等等

         首先添加控件到xml文件中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"android:layout_height="match_parent" android:orientation="vertical"><HorizontalScrollView android:layout_width="match_parent" android:layout_height="wrap_content"    android:id="@+id/hsview" android:scrollbars="none" android:layout_marginTop="10dp">    <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"        android:gravity="center_vertical">        <View android:id="@+id/view" android:layout_width="60dp" android:layout_height="30dp"            android:background="@drawable/tag_shape" android:visibility="visible"            android:tag="0"/>        <LinearLayout android:id="@+id/tag_lly" android:layout_width="match_parent"            android:layout_height="30dp" android:orientation="horizontal"            android:gravity="center_vertical"></LinearLayout>    </RelativeLayout></HorizontalScrollView>  <ViewSwitcher android:id="@+id/viewswitcher"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:scrollbars="none"></ViewSwitcher></LinearLayout>
         Java代码中:

        //设置视图工厂        viewSwitcher.setFactory(new ViewSwitcher.ViewFactory() {            @Override            public View makeView() {                return getLayoutInflater().inflate(R.layout.itemview,null);            }        });        //设置切入动画       TranslateAnimation animationTop=new TranslateAnimation(0,0,-15,0);        animationTop.setFillAfter(true);        animationTop.setDuration(200);        viewSwitcher.setInAnimation(animationTop);        //设置切出动画        TranslateAnimation animationBottom=new TranslateAnimation(0,0,0,60);        animationBottom.setFillAfter(true);        animationBottom.setDuration(200);        viewSwitcher.setOutAnimation(animationBottom);
        第一步:设置视图工厂

        第二步:设置切入和切出动画,我的动画是上下滚动的,所以看到的X都是0

       第三步: 由于我的项目中是需要一直不停的进行切换的,所以这时候就需要调用Android中另一个工具类ScheduledExecutorService,此类是实现了和定时器相同的功能,但是比定时器要好,具体哪里好,由于时间关系,还没研究,有兴趣的可以参考:Java 并发专题 : Timer的缺陷 用ScheduledExecutorService替代好继续上我们的代码:

    @Override    protected void onStart() {        super.onStart();        /*schedule(task,initDelay):安排所提交的Callable或Runnable任务在initDelay指定的时间后执行。        scheduleAtFixedRate():安排所提交的Runnable任务按指定的间隔重复执行        scheduleWithFixedDelay():安排所提交的Runnable任务在每次执行完后,等待delay所指定的时间后重复执行。*/        scheduledExecutorService= Executors.newSingleThreadScheduledExecutor();        scheduledExecutorService.scheduleAtFixedRate(new Runnable() {            @Override            public void run() {            handler.obtainMessage().sendToTarget();            }        },1,5, TimeUnit.SECONDS);    }

        第四步:也就是最后一步,当然是调用handler,更新界面啦:

   private android.os.Handler handler=new android.os.Handler(){       @Override       public void handleMessage(Message msg) {           super.handleMessage(msg);           viewSwitcher.getNextView().findViewById(R.id.textview).setVisibility(View.VISIBLE);           String tag=tags[indexSel%tags.length];           ((TextView)viewSwitcher.getNextView().findViewById(R.id.textview)).setText(tag);           viewSwitcher.showNext();           indexSel++;       }   };
           暂时上班不方便先写这么多,更详细的,请移步:Android 中文API (61) —— ViewSwitcher
           

          

0 0
原创粉丝点击