ViewFlipper实现竖向广播轮转效果

来源:互联网 发布:java target value 编辑:程序博客网 时间:2024/05/16 08:12

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,就这些了。

0 0
原创粉丝点击