ViewFlipper实现竖向广播轮转效果

ViewFlipper继承自ViewAnimator,再上层是FrameLayout,OK,把它当成FrameLayout容器使用。

直接看例子:
layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="wy.bzt.com.carousel.MainActivity">


    <ViewFlipper
        android:id="@+id/vf"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
       android:flipInterval="2000"
        >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/test1"
            android:textSize="24sp"
            android:gravity="center_horizontal"
            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/test2"
            android:textSize="24sp"
            android:gravity="center_horizontal"
            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/test3"
            android:textSize="24sp"
            android:gravity="center_horizontal"
            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/test4"
            android:textSize="24sp"
            android:gravity="center_horizontal"
            />
    </ViewFlipper>

</RelativeLayout>

activity:

public class MainActivity extends AppCompatActivity {
 @butterknife.Bind(R.id.vf)
    ViewFlipper vf;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        butterknife.ButterKnife.bind(this);
        vf.startFlipping();
    }
}

好吧,就这么简单,直接可以运行了。
为了效果好一点,实用一点,优化一下代码:
layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="wy.bzt.com.carousel.MainActivity">


    <ViewFlipper
        android:id="@+id/vf"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        >

    </ViewFlipper>

</RelativeLayout>

activity:

public class MainActivity extends AppCompatActivity {

    @butterknife.Bind(R.id.vf)
    ViewFlipper vf;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        butterknife.ButterKnife.bind(this);
        initView();

    }

    private void initView() {
        String [] carousel=getResources().getStringArray(R.array.mycarousel);
        int size= carousel.length;
        for (String s:carousel){
            TextView tv=new TextView(this);
            tv.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
                    FrameLayout.LayoutParams.WRAP_CONTENT));
            tv.setGravity(Gravity.CENTER_HORIZONTAL);
            tv.setText(s);
            tv.setTextSize(dp2px(20));
            vf.addView(tv);
        }
        vf.setFlipInterval(3000);
        vf.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.carousel_in));
        vf.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.carousel_out));
        vf.startFlipping();
    }
    /** 单位转换 */
    public  int dp2px( int dp) {
        float scale = getResources().getDisplayMetrics().density;
        return (int) (dp * scale + 0.5f);
    }


}

anim:
carousel_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    >

    <translate
        android:fromYDelta="100%"
        android:toYDelta="0%"
        />
    <alpha android:fromAlpha="0.0"
        android:toAlpha="1.0"/>
</set>

carousel_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    >
    <translate
        android:fromYDelta="0%"
        android:toYDelta="-100%"
        />
    <alpha android:fromAlpha="1.0"
        android:toAlpha="0.0"/>
</set>

strings:

<resources>
    <string name="app_name">Carousel</string>

    <string name="test1">今年过节不收礼~</string>
    <string name="test2">收礼还收脑白金!</string>
    <string name="test3">我就不收脑白金!!!</string>
    <string name="test4">脑黄金巨惠来袭~~</string>


    <string-array name="mycarousel">

        <item >@string/test1</item>
        <item >@string/test2</item>
        <item >@string/test3</item>
        <item >@string/test4</item>
    </string-array>
</resources>

代码很简单,就不注释了。添加了一个动画效果,一个动态的内容填充效果,只需要更改数据源的内容就可以控制播放内容。OK,就这些了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值