您的位置:首页 > 其它

ViewFlipper(翻转视图)的基本使用

2016-06-17 21:16 281 查看
ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放! 

和ViewPager不同,ViewPager是一页页的,而ViewFlipper则是一层层的,和ViewPager一样,很多时候, 用来实现进入应用后的引导页,或者用于图片轮播,本节我们就使用ViewFlipper写一个简单的图片
轮播的例子

首次接触一个对象,不了解怎么处?ctrt+T (AS : ctrl+H)一把 继承关系

ViewFlipper extends ViewAnimator

ViewAnimator extends FrameLayout

直接上代码:

package com.xiangsc.fzstdemo;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MotionEvent;

import android.widget.ImageView;

import android.widget.ViewFlipper;

public class MainActivity extends Activity {
private ViewFlipper v;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
v=new ViewFlipper(getApplication());
int icons[]={R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e};
for(int i=0;i<icons.length;i++){

ImageView iv=new ImageView(getApplication());
iv.setImageResource(icons[i]);
v.addView(iv, i);

}
v.startFlipping();//查看源代码默认3000时间
setContentView(v);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override

public boolean onTouchEvent(MotionEvent event) {
int startX = 0;
int endX = 0;
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
endX=(int) event.getX();
startX=endX;
break;
case MotionEvent.ACTION_DOWN:
startX=(int) event.getX();
break;
case MotionEvent.ACTION_UP:
if(startX-endX>0){
v.showPrevious();
}
else{
v.showNext();
}
break;
default:
break;
}
return super.onTouchEvent(event);

}

}

v.startFlipping();//查看源代码默认3000时间

查源码可以看到原理轮播原理:

追一下源码:

 public
void startFlipping() {

        mStarted = true;

        updateRunning();

    }

 private
void updateRunning() {

        updateRunning(true);

    }

//终于追到

 private
void updateRunning(boolean flipNow) {

        boolean running = mVisible && mStarted && mUserPresent;

        if (running != mRunning) {

            if (running) {

                showOnly(mWhichChild, flipNow);

                Message msg = mHandler.obtainMessage(FLIP_MSG);

                mHandler.sendMessageDelayed(msg, mFlipInterval);

            } else {

                mHandler.removeMessages(FLIP_MSG);

            }

            mRunning = running;

        }

        if (LOGD) {

            Log.d(TAG, "updateRunning() mVisible=" + mVisible + ", mStarted=" + mStarted

                    + ", mUserPresent=" + mUserPresent + ", mRunning=" + mRunning);

        }

    }

    private static final int DEFAULT_INTERVAL = 3000;
//查看源代码默认3000时间 是吧 菜鸟我没逗你玩吧!!!!!

    private int mFlipInterval = DEFAULT_INTERVAL;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: