android经验积累android进阶之旅常用控件

ViewFlipper的学习,实现公告轮播条,界面切换动画的效果

2017-02-28  本文已影响328人  再忙碌也解不了爱的渴

简要概括

在我们平常开发中,其实很多效果都可以用原生的控件来实现,只是我们可能不太知道。我在开发中碰到了一个有意思的控件,就是ViewFilpper。可以用来实现很多效果,比如公告条,导航页的切换,同一个布局不同的展示效果,等等。

ViewFlipper.gif
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        >
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="15dp"
            android:src="@drawable/home_platform_notice" />
        <View
            android:layout_width="1px"
            android:layout_height="20dp"
            android:layout_marginLeft="5dp"
            android:background="#D9D9D9" />
        <ViewFlipper
            android:id="@+id/viewfli"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:background="#f6f6f6"/>
    </LinearLayout>```

- #####代码实现

public class MainActivity extends AppCompatActivity {

private ViewFlipper viewFlipper;
private List<TextView> mList;
private String[]  des = new String[]{"盈盈一水间,脉脉不得语。"
,"我渴望和你打架,也渴望抱抱你。","醒来觉得甚是爱你。"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    viewFlipper = (ViewFlipper) findViewById(R.id.viewfli);
    initData();

    //给ViewFlipper设置内容
    for(int i = 0; i<mList.size();i++){
        viewFlipper.addView(mList.get(i));
    }
    //给ViewFlipper设置in/out的动画效果
    viewFlipper.setInAnimation(this,R.anim.push_up_in);
    viewFlipper.setOutAnimation(this,R.anim.push_up_out);

   //isFlipping: 用来判断View切换是否正在进行
   //setFilpInterval:设置View之间切换的时间间隔
   //startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行
   //stopFlipping: 停止View切换
    
    viewFlipper.startFlipping();
}

/**
 * 获取数据,在实际开发中可对服务器返回的数据进行解析
 */
private void initData() {
    mList = new ArrayList<TextView>();
    for(int i = 0 ; i<des.length; i++){
        TextView tv = new TextView(this);
        tv.setTextSize(24);
        tv.setTextColor(getResources().getColor(R.color.colorAccent));
        tv.setText(des[i]);
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //这里只是Toast了一下,实际开发中可以跳转到指定的页面
                Toast.makeText(MainActivity.this,"do Something",Toast.LENGTH_SHORT).show();
            }
        });
        mList.add(tv);
    }
}

}

#####用到的动画
- #####push_up_in

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

- #####push_up_in

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

- ####效果图(界面切换的效果,先在布局中写好显示的View)

![View2.gif](http://upload-images.jianshu.io/upload_images/4036989-8d8f052cc5911b92.gif?imageMogr2/auto-orient/strip)

- #####来看看我们的布局

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xlh="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"

<com.ant.liao.GifView
    android:id="@+id/gif_view"
    android:layout_width="match_parent"
    android:layout_height="400dp"
    android:layout_centerInParent="true"/>

<com.example.administrator.viewflipper.view.DepositoryStepView
    android:id="@+id/depository_step_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="54dp"
    android:layout_marginRight="54dp"
    android:layout_marginTop="16dp"
    xlh:barColors="#FFDDDDDD"
    xlh:canDrag="false"
    xlh:currentStep="0"
    xlh:progressColor="#FF34C3B7"
    xlh:stepCount="3"
    xlh:stepNormalColor="#FFDDDDDD"
    xlh:stepSelectedColor="#FF34C3B7" >
</com.example.administrator.viewflipper.view.DepositoryStepView>

<ViewFlipper
    android:id="@+id/view_flipper"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:flipInterval="300"
    android:layout_marginTop="16dp"
    android:inAnimation="@anim/enter_right_in"
    android:outAnimation="@anim/exit_left_out"
    android:persistentDrawingCache="animation">

    <!--第一步-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:background="#FFFFFF"
            android:paddingLeft="15dp"
            >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:paddingTop="15dp"
                >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="姓名"
                    android:paddingRight="33dp"
                    android:textSize="16sp"/>

                <EditText
                    android:id="@+id/et_input_name"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@null"
                    android:hint="请输入您的真实姓名"
                    android:maxLength="6"
                    android:singleLine="true"
                    android:textSize="16sp"/>

            </LinearLayout>


            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:paddingBottom="11dp"
                android:paddingTop="15dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="手机号"
                    android:paddingRight="17dp"
                    android:textSize="16sp"/>

                <EditText
                    android:id="@+id/et_input_phone"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@null"
                    android:hint="请输入手机号"
                    android:maxLength="11"
                    android:inputType="number"
                    android:singleLine="true"
                    android:textSize="16sp"/>
            </LinearLayout>
        </LinearLayout>
        <Button
            android:id="@+id/btn_first_confirm"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="确定"
            android:layout_marginRight="15dp"
            android:textSize="18sp"
            android:layout_marginLeft="15dp"
            android:paddingTop="7.5dp"
            android:paddingBottom="7.5dp"
            android:layout_marginTop="13.5dp"
            />

    </LinearLayout>
    <!--第二步-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="#ffffff"
        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="9dp"
            android:paddingLeft="15dp"
            android:text="通过手机号发送验证码方式注册账户"
            android:textSize="12sp"
            />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="9dp"
            android:orientation="horizontal"
            android:paddingLeft="15dp"
            android:paddingRight="15dp">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="14dp"
                android:paddingBottom="14dp"
                >
                <EditText
                    android:id="@+id/et_input_sms"
                    style="@style/EditTextStyle"
                    android:hint="短信验证码"
                    android:inputType="number"
                    android:gravity="left"
                    android:drawableBottom="@null"
                    android:maxLength="6"
                    android:textColorHint="#FF999999"/>

                <Button
                    android:id="@+id/btn_obtain"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:background="#ffffff"
                    android:text="获取验证码"
                    android:textColor="#FFF64C3E"
                    android:textSize="14sp"/>

            </RelativeLayout>
        </LinearLayout>

        <Button
            android:id="@+id/btn_second_confirm"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="确定"
            android:layout_marginRight="15dp"
            android:textSize="18sp"
            android:layout_marginLeft="15dp"
            android:paddingTop="7.5dp"
            android:paddingBottom="7.5dp"
            android:layout_marginTop="40dp"
            />

    </LinearLayout>
    <!--第三步-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingLeft="15dp"
            >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:paddingTop="15dp"
                >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="交易密码"
                    android:paddingRight="16dp"
                    android:textSize="16sp"/>

                <EditText
                    android:id="@+id/et_input_password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@null"
                    android:hint="请设置您的交易密码"
                    android:maxLength="20"
                    android:singleLine="true"
                    android:textSize="16sp"/>

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:paddingBottom="11dp"
                android:paddingTop="15dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="确认密码"
                    android:paddingRight="16dp"
                    android:textSize="16sp"/>

                <EditText
                    android:id="@+id/et_confirm"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@null"
                    android:hint="请再次输入您的交易密码"
                    android:maxLength="20"
                    android:singleLine="true"
                    android:textSize="16sp"/>
            </LinearLayout>

        </LinearLayout>

        <TextView
            android:id="@+id/tv_length"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="9dp"
            android:paddingLeft="15dp"
            android:text="交易密码长度应在6-20个字符之间 (0/20)"
            android:textSize="12sp"
            />

        <Button
            android:id="@+id/btn_three_confirm"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="确定"
            android:layout_marginRight="15dp"
            android:textSize="18sp"
            android:layout_marginLeft="15dp"
            android:paddingTop="7.5dp"
            android:paddingBottom="7.5dp"
            android:layout_marginTop="13.5dp"
            />

    </LinearLayout>
</ViewFlipper>

</LinearLayout>```

这里注意的是ViewFlipper 每个子View外层父控件都是LinearLayout。
用到的动画
<?xml version="1.0" encoding="utf-8"?>
<set 
xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="300"
        android:fillAfter="true"
        android:fromXDelta="100.0%p"
        android:toXDelta="0.0" />
</set>
<?xml version="1.0" encoding="utf-8"?>
<set 
xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="300"
        android:fromXDelta="0.0"
        android:toXDelta="-100.0%p" />
</set>
public class Main2Activity extends AppCompatActivity implements View.OnClickListener {

    private GifView gifView;
    private ViewFlipper viewFlipper;
    private Button btn1;
    private DepositoryStepView depositoryStepView;
    private Button btn2;
    private Button btn3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initGifView();
        initView();
    }

    /**
     * 初始化控件
     */
    private void initView() {
        viewFlipper = (ViewFlipper) findViewById(R.id.view_flipper);
        depositoryStepView = (DepositoryStepView) findViewById(R.id.depository_step_view);
        btn1        = (Button) findViewById(R.id.btn_first_confirm);
        btn1.setOnClickListener(this);
        btn2 = (Button) findViewById(R.id.btn_second_confirm);
        btn2.setOnClickListener(this);
        btn3 = (Button) findViewById(R.id.btn_three_confirm);
        btn3.setOnClickListener(this);
    }

    /**
     * 播放Gif图动画
     */
    private void initGifView() {
        gifView = (GifView) findViewById(R.id.gif_view);
        //设置gif图
        gifView.setGifImage(R.drawable.love);
        //设置显示的大小,拉伸或压缩
        gifView.setShowDimension(500,500);
        //设置显示方式
        gifView.setGifImageType(GifView.GifImageType.COVER);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_first_confirm://第一步确定按钮
                //setDisplayedChild(index) 根据索引显示子View
                //showPrevious(); 显示上一个
                //showNext(); 显示下一个
                viewFlipper.setDisplayedChild(1);
                depositoryStepView.setCurrentStep(1);
                break;

            case R.id.btn_second_confirm://第二步确定按钮
                viewFlipper.setDisplayedChild(2);
                depositoryStepView.setCurrentStep(2);
                break;

            case R.id.btn_three_confirm://第三步确定按钮
                viewFlipper.setDisplayedChild(0);
                depositoryStepView.setCurrentStep(0);
                break;
        }
    }
}

总结

上一篇下一篇

猜你喜欢

热点阅读