Android中viewSwitcher的使用

         用过手机淘宝的人,应该都有看到淘宝首页,中间的位置,有一个上下滚动的消息条幅。之前因为公司项目中有需要用到这种效果,所以就找了类似控件,发现了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
           

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值