使用ViewFlipper实现图片自动切换,并支持手势滑动切换

来源:互联网 发布:最终幻想雷霆身材数据 编辑:程序博客网 时间:2024/06/01 09:49


首先来看看项目结构目录:




不好意思,我右开始使用AndroidStudio了 ,开始用不习惯,就特意去搭建了eclipse的开发环境,整了好久,后来发现eclipse还是不如AndroidStudio啊,虽然快捷键那些东西啊用不太习惯,但是相信慢慢都会好的。


首先我们直接看代码吧:

先是activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">   <ViewFlipper       android:id="@+id/viewFlipper"       android:layout_width="match_parent"       android:layout_height="match_parent"></ViewFlipper></LinearLayout>


然后再看看main_activity:

package com.example.lolli.viewflipper;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.MotionEvent;import android.widget.ImageView;import android.widget.ViewFlipper;/** * 使用ViewFlipper自动切换图片并支持手势滑动切换 */public class MainActivity extends AppCompatActivity {    // 定义一个ViewFlipper    private ViewFlipper flipper;    // 定义一个手指触摸屏幕的x轴坐标    private float startX;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 初始化ViewFlipper        flipper = (ViewFlipper) findViewById(R.id.viewFlipper);        // 给ViewFlipper添加内容。这里添加四个ImageView        flipper.addView(getImageView(R.drawable.shi1));        flipper.addView(getImageView(R.drawable.shi2));        flipper.addView(getImageView(R.drawable.shi3));        flipper.addView(getImageView(R.drawable.shi4));        //  设置自动切换时间间隔5秒         flipper.setFlipInterval(5000);        // 设置切换动画         flipper.setInAnimation(this, R.anim.left_in);         flipper.setOutAnimation(this, R.anim.left_out);        // 开始切换         flipper.startFlipping();    }    /**     * 创建一个ImageView     * @param resId     *          图片资源Id     * @return     *          ImageView对象     */    private ImageView getImageView(int resId) {        ImageView image = new ImageView(this);        image.setBackgroundResource(resId);        return image;    }    /**     * 屏幕手势     * @param event     * @return     */    @Override    public boolean onTouchEvent(MotionEvent event) {        switch (event.getAction()) {            // 手指接触屏幕            case MotionEvent.ACTION_DOWN: {                startX = event.getX(); // 将手指接触屏幕的X轴的坐标保存下来                break;            }            // 手指滑动屏幕            case MotionEvent.ACTION_UP: {                //向右滑动                if (event.getX() - startX > 100) {                    flipper.setInAnimation(this, R.anim.right_in);                    flipper.setOutAnimation(this, R.anim.right_out);                    flipper.showPrevious();                }                //向左滑动                if (startX - event.getX() > 100) {                    flipper.setInAnimation(this, R.anim.left_in);                    flipper.setOutAnimation(this, R.anim.left_out);                    flipper.showNext();                }                break;            }        }        return super.onTouchEvent(event);    }}


onTouchEvent方法就是实现手势操作的切换的代码了,代码注释也比较详细,不用多说应该能看懂,
在这个方法里面有两个方法 <pre name="code" class="java">flipper.showPrevious(); // 即显示上一页的内容
<pre name="code" class="java">flipper.showNext();  // 显示下一页


目录结构里还有个关于动画的文件:

left_in.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:fromXDelta="100%p"        android:toXDelta="0"        android:duration="600"        />    <alpha        android:fromAlpha="0.1"        android:toAlpha="1.0"        android:duration="600"        /></set>
left_out.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:fromXDelta="0"        android:toXDelta="-100%p"        android:duration="600"        />    <alpha        android:fromAlpha="1.0"        android:toAlpha="0.1"        android:duration="600"        /></set>
right_in.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:fromXDelta="-100%p"        android:toXDelta="0"        android:duration="600"        />    <alpha        android:fromAlpha="0.1"        android:toAlpha="1.0"        android:duration="600"        /></set>
right_out.xml

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










0 0
原创粉丝点击