Android應用開發系列課程------ViewPager與ViewFlipper較量

本講主要講解ViewPager與ViewFlipper,通過一個案例來讓大家感受它們之間的區別。

案例:實現應用介紹導航界面。

案例效果圖:

175140665.png

175143627.png

175147731.png

175150454.png

175153443.png

一.ViewPager實現代碼:

(1)佈局文件代碼:

guide_viewpager.xml

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

home.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="歡迎進入首頁" />
</LinearLayout>

(2)功能代碼:

ViewPagerActivity.java

package com.anjoyo.viewpager;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;

public class ViewPagerActivity extends Activity {

private ArrayList<View> pagerList;
private ViewPager viewPager;
private RelativeLayout mMainLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide_viewpager);
mMainLayout = (RelativeLayout) this.findViewById(R.id.rl_main);
addMainLayout(mMainLayout);
}
private void addMainLayout(RelativeLayout layout) {
viewPager = new ViewPager(this);
createView();
RelativeLayout.LayoutParams params_cal = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
layout.addView(viewPager, params_cal);
}
private void createView() {
ImageView preView = new ImageView(ViewPagerActivity.this);
preView.setBackgroundResource(R.drawable.new_version_1);
ImageView currentView = new ImageView(ViewPagerActivity.this);
currentView.setBackgroundResource(R.drawable.new_version_2);
ImageView last_1_View = new ImageView(ViewPagerActivity.this);
last_1_View.setBackgroundResource(R.drawable.new_version_3);
ImageView last_2_View = new ImageView(ViewPagerActivity.this);
last_2_View.setBackgroundResource(R.drawable.new_version_4);
ImageView last_3_View = new ImageView(ViewPagerActivity.this);
last_3_View.setBackgroundResource(R.drawable.new_version_5);
last_3_View.setId(5);
pagerList = new ArrayList<View>();
pagerList.add(preView);
pagerList.add(currentView);
pagerList.add(last_1_View);
pagerList.add(last_2_View);
pagerList.add(last_3_View);
viewPager.setAdapter(new GuidePageAdapter());
last_3_View.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(ViewPagerActivity.this,
HomeActivity.class);
startActivity(intent);

}
});

}
class GuidePageAdapter extends PagerAdapter {

@Override
public int getCount() {
return pagerList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView(pagerList.get(position));

}
@Override
public Object instantiateItem(View container, int position) {
((ViewPager) container).addView(pagerList.get(position));
return pagerList.get(position);
}

}

}

HomeActivity.java

package com.anjoyo.viewpager;
import android.app.Activity;
import android.os.Bundle;
public class HomeActivity extends Activity {

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

(3)清單文件代碼:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anjoyo.viewpager"
android:versionCode="1"
android:versionName="1.0" >
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:name=".ViewPagerActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:name=".HomeActivity" >
</activity>
</application>
</manifest>

二.ViewFlipper實現代碼

(1)佈局文件代碼:

guide.xml

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

home.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="歡迎進入首頁" />
</LinearLayout>

slide_left_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="400"
android:fromXDelta="100%p"
android:toXDelta="0" >
</translate>

</set>

slide_left_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="400"
android:fromXDelta="0"
android:toXDelta="-100%p" >
</translate>

</set>

slide_right_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android
:duration="400"
android:fromXDelta="-100%p"
android:toXDelta="0" >
</translate>

</set>

slide_right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="400"
android:fromXDelta="0"
android:toXDelta="100%p" >
</translate>

</set>

(2)功能代碼:

GuideActivity.java

package com.anjoyo.gesture;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.ViewFlipper;

public class GuideActivity extends Activity {

private static final int SWIPE_MIN_DISTANCE = 120;//手勢滑動的最短距離
private static final int SWIPE_THRESHOLD_VELOCITY = 200;//手勢滑動最低滑動速度
private GestureDetector mGesture;//手勢識別類
private ViewFlipper viewFlipper;

private Animation mSlideLeftIn;//左進動畫
private Animation mSlideLeftOut;//左出動畫
private Animation mSlideRightIn;//右進動畫
private Animation mSlideRightOut;//右出動畫
private RelativeLayout mMainLayout;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);
mGesture = new GestureDetector(this, new MyOnGestureListener());
mMainLayout = (RelativeLayout) this.findViewById(R.id.rl_main);
addMainLayout(mMainLayout);

}
/*
* 初始界面
* */
private void addMainLayout(RelativeLayout layout) {
viewFlipper = new ViewFlipper(this);
createView();
RelativeLayout.LayoutParams params_cal = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
layout.addView(viewFlipper, params_cal);
}
//動畫監聽器
AnimationListener animationListener = new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}

@Override
public void onAnimationRepeat(Animation animation) {
}

@Override
public void onAnimationEnd(Animation animation) {
// 當動畫完成後調用
createView();
}
};
/*
* 動態加載的界面View
* */
private void createView() {

ImageView preView = new ImageView(GuideActivity.this);
preView.setId(1);
preView.setBackgroundResource(R.drawable.new_version_1);
ImageView currentView = new ImageView(GuideActivity.this);
currentView.setBackgroundResource(R.drawable.new_version_2);
ImageView last_1_View = new ImageView(GuideActivity.this);
last_1_View.setBackgroundResource(R.drawable.new_version_3);
ImageView last_2_View = new ImageView(GuideActivity.this);
last_2_View.setBackgroundResource(R.drawable.new_version_4);
ImageView last_3_View = new ImageView(GuideActivity.this);
last_3_View.setBackgroundResource(R.drawable.new_version_5);
last_3_View.setId(5);

viewFlipper.addView(preView);
viewFlipper.addView(currentView);
viewFlipper.addView(last_1_View);
viewFlipper.addView(last_2_View);
viewFlipper.addView(last_3_View);
mSlideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
mSlideLeftOut = AnimationUtils.loadAnimation(this,
R.anim.slide_left_out);
mSlideRightIn = AnimationUtils.loadAnimation(this,
R.anim.slide_right_in);
mSlideRightOut = AnimationUtils.loadAnimation(this,
R.anim.slide_right_out);

mSlideLeftIn.setAnimationListener(animationListener);
mSlideLeftOut.setAnimationListener(animationListener);
mSlideRightIn.setAnimationListener(animationListener);
mSlideRightOut.setAnimationListener(animationListener);
last_3_View.setOnTouchListener(null);
last_3_View.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(GuideActivity.this, HomeActivity.class);
startActivity(intent);

}
});
}

@Override
public boolean onTouchEvent(MotionEvent event) {
return mGesture.onTouchEvent(event);
}
//手機屏幕手勢監聽器
class MyOnGestureListener implements OnGestureListener {

@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}

@Override
public void onShowPress(MotionEvent e) {

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// 監聽滾動事件
// Toast.makeText(MainActivity.this, "我被滾動了", 0).show();
return false;
}

@Override
public void onLongPress(MotionEvent e) {
// 監聽長按事件
// Toast.makeText(MainActivity.this, "我被長按了", 0).show();
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// 監聽左右滑動事件
// Toast.makeText(MainActivity.this, "我被滑動了", 0).show();
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
// Toast.makeText(MainActivity.this, "向左滑動了", 0).show();
if (viewFlipper.getCurrentView().getId() == 5) {

return false;
} else {
viewFlipper.setInAnimation(mSlideLeftIn);
viewFlipper.setOutAnimation(mSlideLeftOut);
viewFlipper.showNext();
return true;
}
// left to right swipe
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
// Toast.makeText(MainActivity.this, "向右滑動了", 0).show();
if (viewFlipper.getCurrentView().getId() == 1) {
return false;
} else {
viewFlipper.setInAnimation(mSlideRightIn);
viewFlipper.setOutAnimation(mSlideRightOut);
viewFlipper.showPrevious();
return true;
}

}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
// 監聽按下事件
// Toast.makeText(MainActivity.this, "我被按下了", 0).show();
return false;
}
}
}

HomeActivity.java

package com.anjoyo.gesture;
import android.app.Activity;
import android.os.Bundle;

public class HomeActivity extends Activity {

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

}

(3)清單文件代碼:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anjoyo.gesture"
android:versionCode="1"
android:versionName="1.0" >
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".GuideActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".HomeActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
</activity>
</application>
</manifest>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章