国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ViewFlipper基本是實現及上下左右滑動

2019-11-09 18:44:36
字體:
來源:轉載
供稿:網友

最近遇到了一些奇葩需求需要輪播上下左右滑動,原來的viewpage就不好用了,所有我就用了viewfipper控件

一步一步來,先熟悉下這個控件

一、基本實現

先寫個最簡單的例子

<?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:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="recycleapplication.yundong.com.viewflipper.MainActivity">    <ViewFlipper        android:id="@+id/flipper"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_marginTop="10dp"        android:flipInterval="2000" >        <ImageView            android:layout_width="fill_parent"            android:layout_height="300dip"            android:scaleType="fitXY"            android:src="@drawable/img_control_normal"/>        <ImageView            android:layout_width="fill_parent"            android:layout_height="300dip"            android:scaleType="fitXY"            android:src="@drawable/img_play_lan"/>        <ImageView            android:layout_width="fill_parent"            android:layout_height="300dip"            android:scaleType="fitXY"            android:src="@drawable/img_dd"/>        <ImageView            android:layout_width="fill_parent"            android:layout_height="300dip"            android:scaleType="fitXY"            android:src="@drawable/ic_launcher"/>    </ViewFlipper></RelativeLayout>

然后是代碼簡單的幾行

flipper = (ViewFlipper) findViewById(R.id.flipper);flipper.setFlipInterval(2000);//設置切換的間隔時間flipper.startFlipping();

二、高級實現——實現手勢滑動

然后是手動實現的代碼

核心方法

flipper.showNext();//顯示下一個視圖flipper.showPRevious();//顯示上一個視圖
public class Main2Activity extends AppCompatActivity implements View.OnTouchListener {    ViewFlipper flipper;    private GestureDetector mDetector; //手勢檢測    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        flipper = (ViewFlipper) findViewById(R.id.flipper);        flipper.setFlipInterval(2000);//設置切換的間隔時間        flipper.startFlipping();        flipper.setOnTouchListener(this);    }    @Override    public boolean onTouch(View view, MotionEvent motionEvent) {        return mDetector.onTouchEvent(motionEvent);    }    private class simpleGestureListener extends GestureDetector.SimpleOnGestureListener{        final int FLING_MIN_DISTANCE = 100, FLING_MIN_VELOCITY = 200;        //不知道為什么,不加上onDown函數的話,onFling就不會響應        @Override        public boolean onDown(MotionEvent e) {            // TODO Auto-generated method stub            Toast.makeText(Main2Activity.this, "ondown", Toast.LENGTH_SHORT).show();            return true;//這里需要返回true才能監聽手勢        }        @Override        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,                               float velocityY) {            // Fling left            if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE                    && Math.abs(velocityX) > FLING_MIN_VELOCITY) {                flipper.showNext();//顯示下一個視圖                Toast.makeText(Main2Activity.this, "Fling Left", Toast.LENGTH_SHORT).show();            } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE                    && Math.abs(velocityX) > FLING_MIN_VELOCITY) {                // Fling right                flipper.showPrevious();//顯示上一個視圖                Toast.makeText(Main2Activity.this, "Fling Right", Toast.LENGTH_SHORT).show();            }            return true;        }    }}

三、動態添加圖片及設置其它的方向和動效

先貼出動效寫在了anim文件中push_down_in
<set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="1000"        android:fromYDelta="-100%p"        android:toYDelta="0" />    <alpha        android:duration="1000"        android:fromAlpha="0.0"        android:toAlpha="1.0" /></set>push_down_out

<set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="1000"        android:fromYDelta="0"        android:toYDelta="100%p" />    <alpha        android:duration="1000"        android:fromAlpha="1.0"        android:toAlpha="0.0" /></set>push_up_in

<set xmlns:android="http://schemas.android.com/apk/res/android">   <translate       android:fromYDelta="100%p"       android:toYDelta="0"      android:duration="1000"/>   <alpha android:fromAlpha="0.0"      android:toAlpha="1.0"       android:duration="1000" /></set>push_up_down

<set xmlns:android="http://schemas.android.com/apk/res/android">   <translate android:fromYDelta="0"       android:toYDelta="-100%p"       android:duration="1000"/>   <alpha android:fromAlpha="1.0"      android:toAlpha="0.0"       android:duration="1000" /></set>其它兩個方向我就不貼了

public class Main4Activity extends AppCompatActivity implements View.OnTouchListener{    ViewFlipper flipper;    private GestureDetector mDetector; //手勢檢測    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main4);        flipper = (ViewFlipper) findViewById(R.id.flipper);//        flipper.setFlipInterval(2000);//設置切換的間隔時間//        flipper.startFlipping();        flipper.addView(getImageView(R.drawable.ic_launcher));        flipper.addView(getImageView(R.drawable.img_control_normal));        flipper.addView(getImageView(R.drawable.img_dd));        flipper.addView(getImageView(R.drawable.img_play_lan));        flipper.setOnTouchListener(this);        mDetector = new GestureDetector(new Main4Activity.simpleGestureListener());    }    //生成imageview    private ImageView getImageView(int id){        ImageView imageView = new ImageView(this);        imageView.setImageResource(id);        return imageView;    }    @Override    public boolean onTouch(View view, MotionEvent motionEvent) {        return mDetector.onTouchEvent(motionEvent);    }    private class simpleGestureListener extends GestureDetector.SimpleOnGestureListener{        final int FLING_MIN_DISTANCE = 100, FLING_MIN_VELOCITY = 200;        //不知道為什么,不加上onDown函數的話,onFling就不會響應        @Override        public boolean onDown(MotionEvent e) {            // TODO Auto-generated method stub            Toast.makeText(Main4Activity.this, "ondown", Toast.LENGTH_SHORT).show();            return true;//這里需要返回true才能監聽手勢        }        @Override        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,                               float velocityY) {            // Fling left  從右向左劃            if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE                    && Math.abs(velocityX) > FLING_MIN_VELOCITY) {                flipper.setOutAnimation(AnimationUtils.loadAnimation(Main4Activity.this,                        R.anim.push_left_out));                flipper.setInAnimation(AnimationUtils.loadAnimation(Main4Activity.this,                        R.anim.push_left_in));                flipper.showNext();//顯示下一個視圖                Toast.makeText(Main4Activity.this, "Fling Left", Toast.LENGTH_SHORT).show();            } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE                    && Math.abs(velocityX) > FLING_MIN_VELOCITY) {                // Fling right 從左向右劃                flipper.setOutAnimation(AnimationUtils.loadAnimation(Main4Activity.this,                        R.anim.push_right_out));                flipper.setInAnimation(AnimationUtils.loadAnimation(Main4Activity.this,                        R.anim.push_right_in));                flipper.showPrevious();//顯示上一個視圖                Toast.makeText(Main4Activity.this, "Fling Right", Toast.LENGTH_SHORT).show();            }else if (e1.getY()-e2.getY()>FLING_MIN_DISTANCE&& Math.abs(velocityY) > FLING_MIN_VELOCITY){                //從下向上劃                flipper.setOutAnimation(AnimationUtils.loadAnimation(Main4Activity.this,                        R.anim.push_up_out));                flipper.setInAnimation(AnimationUtils.loadAnimation(Main4Activity.this,                        R.anim.push_up_in));                flipper.showNext();//顯示下一個視圖            }else if (e2.getY()-e1.getY()>FLING_MIN_DISTANCE&& Math.abs(velocityY) > FLING_MIN_VELOCITY){                //從上向下劃                flipper.setOutAnimation(AnimationUtils.loadAnimation(Main4Activity.this,                        R.anim.push_down_out));                flipper.setInAnimation(AnimationUtils.loadAnimation(Main4Activity.this,                        R.anim.push_down_in));                flipper.showPrevious();//顯示上一個視圖            }            flipper.setEnabled(true);            return true;        }    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平罗县| 云和县| 玛多县| 南靖县| 罗源县| 灵丘县| 屯留县| 贵阳市| 新民市| 汾西县| 新蔡县| 九龙坡区| 福海县| 屯门区| 桃园县| 边坝县| 天峨县| 巴东县| 天长市| 苏尼特右旗| 茶陵县| 吉木乃县| 华阴市| 鹿邑县| 贞丰县| 海淀区| 义马市| 贡觉县| 海晏县| 灵台县| 曲松县| 襄樊市| 化州市| 连云港市| 宿松县| 随州市| 萨迦县| 甘洛县| 巩义市| 霞浦县| 莱阳市|