展会信息港展会大全

Android ViewPager和TabHost结合
来源:互联网   发布日期:2015-10-03 11:12:44   浏览:2722次  

导读:前几天看了网上关于ViewPager实现滑动切换的效果。回来试了一下,发现效果确实不错,但是切换的几个页面只是调用了不同的layout,实际上还是在一个Activity里面,对功能编写就不方便...

前几天看了网上关于ViewPager实现滑动切换的效果。回来试了一下,发现效果确实不错,但是切换的几个页面只是调用了不同的layout,实际上还是在一个Activity里面,对功能编写就不方便了。所以,我想到了TabHost和ViewPager结合,使用TabHost切换Activity,使用ViewPager切换界面,从而晚上切换效果。废话少说,直接看代码吧。

首先是布局的xml

1 <?xml version="1.0" encoding="utf-8"?>

2 <TabHost xmlns:android="http://schemas.android.com/apk/res/android"

3android:id="@android:id/tabhost"

4android:layout_width="fill_parent"

5android:layout_height="fill_parent" >

6

7<LinearLayout

8 android:id="@+id/linearLayout1"

9android:layout_width="fill_parent"

10android:layout_height="fill_parent"

11android:orientation="vertical" >

12

13<TabWidget

14 android:id="@android:id/tabs"

15android:layout_width="wrap_content"

16android:layout_height="0dip" >

17</TabWidget>

18

19<LinearLayout

20 android:id="@+id/linearLayout1"

21android:layout_width="fill_parent"

22android:layout_height="40dip"

23android:background="@drawable/title" >

24

25<TextView

26 android:id="@+id/text1"

27android:layout_width="fill_parent"

28android:layout_height="fill_parent"

29android:layout_weight="1.0"

30android:gravity="center"

31android:text="@string/black"

32android:textColor="#FFFFFF"

33android:textSize="22.0dip" />

34

35<TextView

36 android:id="@+id/text2"

37android:layout_width="fill_parent"

38android:layout_height="fill_parent"

39android:layout_weight="1.0"

40android:gravity="center"

41android:text="@string/gray"

42android:textColor="#FFFFFF"

43android:textSize="22.0dip" />

44

45<TextView

46 android:id="@+id/text3"

47android:layout_width="fill_parent"

48android:layout_height="fill_parent"

49android:layout_weight="1.0"

50android:gravity="center"

51android:text="@string/white"

52android:textColor="#FFFFFF"

53android:textSize="22.0dip" />

54</LinearLayout>

55

56<ImageView

57 android:id="@+id/cursor"

58android:layout_width="fill_parent"

59android:layout_height="wrap_content"

60android:scaleType="matrix"

61android:src="@drawable/a" />

62

63<android.support.v4.view.ViewPager

64 android:id="@+id/vPager"

65android:layout_width="wrap_content"

66android:layout_height="wrap_content"

67android:layout_gravity="center"

68android:layout_weight="1.0"

69android:background="#000000"

70android:flipInterval="30"

71android:persistentDrawingCache="animation" />

72

73<FrameLayout

74 android:id="@android:id/tabcontent"

75android:layout_width="wrap_content"

76android:layout_height="wrap_content"

77android:visibility="gone" >

78</FrameLayout>

79</LinearLayout>

80

81 </TabHost>

然后是java文件

1 package com.wcs233;

2

3 import java.util.ArrayList;

4 import java.util.List;

5

6 import android.app.LocalActivityManager;

7 import android.app.TabActivity;

8 import android.content.Context;

9 import android.content.Intent;

10 import android.graphics.BitmapFactory;

11 import android.graphics.Matrix;

12 import android.os.Bundle;

13 import android.os.Parcelable;

14 import android.support.v4.view.PagerAdapter;

15 import android.support.v4.view.ViewPager;

16 import android.support.v4.view.ViewPager.OnPageChangeListener;

17 import android.util.DisplayMetrics;

18 import android.util.Log;

19 import android.view.View;

20 import android.view.Window;

21 import android.view.animation.Animation;

22 import android.view.animation.TranslateAnimation;

23 import android.widget.ImageView;

24 import android.widget.TabHost;

25 import android.widget.TextView;

26

27 public class ConfigTabActivity extends TabActivity {

28

29//页卡内容

30private ViewPager mPager;

31// Tab页面列表

32private List<View> listViews;

33// 动画图片

34private ImageView cursor;

35// 页卡头标

36private TextView t1, t2, t3;

37// 动画图片偏移量

38private int offset = 0;

39// 当前页卡编号

40private int currIndex = 0;

41// 动画图片宽度

42private int bmpW;

43private LocalActivityManager manager = null;

44private final static String TAG = "ConfigTabActivity";

45private final Context context = ConfigTabActivity.this;

46private TabHost mTabHost;

47

48/** Called when the activity is first created. */

49@Override

50public void onCreate(Bundle savedInstanceState) {

51super.onCreate(savedInstanceState);

52

53Log.d(TAG, "---onCreate---");

54

55requestWindowFeature(Window.FEATURE_NO_TITLE);

56setContentView(R.layout.config);

57

58mTabHost = getTabHost();

59mTabHost.addTab(mTabHost.newTabSpec("A").setIndicator(

60"").setContent(

61new Intent(this, A.class)));

62mTabHost.addTab(mTabHost.newTabSpec("B").setIndicator(

63"").setContent(

64new Intent(this, B.class)));

65mTabHost.addTab(mTabHost.newTabSpec("C").setIndicator(

66"").setContent(

67new Intent(this, C.class)));

68mTabHost.setCurrentTab(0);

69

70manager = new LocalActivityManager(this, true);

71manager.dispatchCreate(savedInstanceState);

72

73InitImageView();

74InitTextView();

75InitViewPager();

76}

77

78/**

79* 初始化头标

80 */

81private void InitTextView() {

82t1 = (TextView) findViewById(R.id.text1);

83t2 = (TextView) findViewById(R.id.text2);

84t3 = (TextView) findViewById(R.id.text3);

85

86t1.setOnClickListener(new MyOnClickListener(0));

87t2.setOnClickListener(new MyOnClickListener(1));

88t3.setOnClickListener(new MyOnClickListener(2));

89}

90

91/**

92* 初始化ViewPager

93 */

94private void InitViewPager() {

95mPager = (ViewPager) findViewById(R.id.vPager);

96listViews = new ArrayList<View>();

97MyPagerAdapter mpAdapter = new MyPagerAdapter(listViews);

98Intent intent = new Intent(context, A.class);

99listViews.add(getView("Black", intent));

100Intent intent2 = new Intent(context, B.class);

101listViews.add(getView("Gray", intent2));

102Intent intent3 = new Intent(context, C.class);

103listViews.add(getView("White", intent3));

104mPager.setAdapter(mpAdapter);

105mPager.setCurrentItem(0);

106mPager.setOnPageChangeListener(new MyOnPageChangeListener());

107}

108

109/**

110* 初始化动画

111 */

112private void InitImageView() {

113cursor = (ImageView) findViewById(R.id.cursor);

114bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a)

115.getWidth();// 获取图片宽度

116DisplayMetrics dm = new DisplayMetrics();

117getWindowManager().getDefaultDisplay().getMetrics(dm);

118int screenW = dm.widthPixels;// 获取分辨率宽度

119offset = (screenW / 3 - bmpW) / 2;// 计算偏移量

120Matrix matrix = new Matrix();

121matrix.postTranslate(offset, 0);

122cursor.setImageMatrix(matrix);// 设置动画初始位置

123}

124

125/**

126* ViewPager适配器

127 */

128public class MyPagerAdapter extends PagerAdapter {

129public List<View> mListViews;

130

131public MyPagerAdapter(List<View> mListViews) {

132this.mListViews = mListViews;

133}

134

135@Override

136public void destroyItem(View arg0, int arg1, Object arg2) {

137((ViewPager) arg0).removeView(mListViews.get(arg1));

138}

139

140@Override

141public void finishUpdate(View arg0) {

142}

143

144@Override

145public int getCount() {

146return mListViews.size();

147}

148

149@Override

150public Object instantiateItem(View arg0, int arg1) {

151((ViewPager) arg0).addView(mListViews.get(arg1), 0);

152return mListViews.get(arg1);

153}

154

155@Override

156public boolean isViewFromObject(View arg0, Object arg1) {

157return arg0 == (arg1);

158}

159

160@Override

161public void restoreState(Parcelable arg0, ClassLoader arg1) {

162}

163

164@Override

165public Parcelable saveState() {

166return null;

167}

168

169@Override

170public void startUpdate(View arg0) {

171}

172}

173

174/**

175* 头标点击监听

176 */

177public class MyOnClickListener implements View.OnClickListener {

178private int index = 0;

179

180public MyOnClickListener(int i) {

181index = i;

182}

183

184@Override

185public void onClick(View v) {

186mPager.setCurrentItem(index);

187}

188};

189

190/**

191* 页卡切换监听

192 */

193public class MyOnPageChangeListener implements OnPageChangeListener {

194

195int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量

196int two = one * 2;// 页卡1 -> 页卡3 偏移量

197

198@Override

199public void onPageSelected(int arg0) {

200Animation animation = null;

201Intent intent = new Intent();

202switch (arg0) {

203case 0:

204

205Log.d(TAG, "---0---");

206mTabHost.setCurrentTab(0);

207if (currIndex == 1) {

208animation = new TranslateAnimation(one, 0, 0, 0);

209} else if (currIndex == 2) {

210animation = new TranslateAnimation(two, 0, 0, 0);

211}

212break;

213case 1:

214

215Log.d(TAG, "---1---");

216mTabHost.setCurrentTab(1);

217if (currIndex == 0) {

218animation = new TranslateAnimation(offset, one, 0, 0);

219} else if (currIndex == 2) {

220animation = new TranslateAnimation(two, one, 0, 0);

221}

222break;

223case 2:

224

225Log.d(TAG, "---2---");

226mTabHost.setCurrentTab(2);

227if (currIndex == 0) {

228animation = new TranslateAnimation(offset, two, 0, 0);

229} else if (currIndex == 1) {

230animation = new TranslateAnimation(one, two, 0, 0);

231}

232break;

233}

234currIndex = arg0;

235animation.setFillAfter(true);// True:图片停在动画结束位置

236animation.setDuration(300);

237cursor.startAnimation(animation);

238}

239

240@Override

241public void onPageScrolled(int arg0, float arg1, int arg2) {

242}

243

244@Override

245public void onPageScrollStateChanged(int arg0) {

246}

247}

248

249private View getView(String id,Intent intent)

250{

251return manager.startActivity(id, intent).getDecorView();

252}

253 }

至于每个单独页面的layout和java,大家就根据自己的需求写吧。

摘自天狼星主

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港