使用ViewPager和TabHost切换布局

来源:互联网 发布:强制进群软件 编辑:程序博客网 时间:2024/06/02 04:27
这是xml文件中的关键部分
        <android.support.v4.view.ViewPager        android:id="@+id/vPager"        android:layout_width="wrap_content"        android:layout_height="0dp"        android:layout_gravity="center"        android:layout_weight="1.0"        android:flipInterval="30"        android:persistentDrawingCache="animation" />
这是java文件中的关键部分
package com.example.ghdf;import java.util.ArrayList;import java.util.List;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.support.v4.view.ViewPager.OnPageChangeListener;import android.view.Display;import android.view.Gravity;import android.view.KeyEvent;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager.LayoutParams;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.PopupWindow;public class MainHaoDF extends Activity {public static MainHaoDF instance = null;private ViewPager viewPager;// 页卡内容private ImageView mTabImg;// 动画图片private ImageView mTab1, mTab2, mTab3;private ImageView imgView1, imgView2, imgView3;private List<View> views;// Tab页面列表private int offset = 0;// 动画图片偏移量private int currIndex = 0;// 当前页卡编号private View view1, view2, view3;// 各个页卡private int one;private int two;private boolean menu_display = false;private PopupWindow menuWindow;private LayoutInflater inflater;private View layout;private LinearLayout mClose;private LinearLayout mCloseBtn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.user_main);InitTextView();InitViewPager();}private void InitViewPager() {viewPager = (ViewPager) findViewById(R.id.vPager);views = new ArrayList<View>();LayoutInflater inflater = getLayoutInflater();view1 = inflater.inflate(R.layout.user_service_layout, null);view2 = inflater.inflate(R.layout.user_subscribe_layout, null);view3 = inflater.inflate(R.layout.user_install_layout, null);views.add(view1);views.add(view2);views.add(view3);viewPager.setAdapter(new MyViewPagerAdapter(views));viewPager.setCurrentItem(0);viewPager.setOnPageChangeListener(new MyOnPageChangeListener());}/** * 初始化头标 */private void InitTextView() {imgView1 = (ImageView) findViewById(R.id.message_image);imgView2 = (ImageView) findViewById(R.id.news_image);imgView3 = (ImageView) findViewById(R.id.setting_image);mTabImg = (ImageView) findViewById(R.id.message_image);imgView1.setOnClickListener(new MyOnClickListener(0));imgView2.setOnClickListener(new MyOnClickListener(1));imgView3.setOnClickListener(new MyOnClickListener(2));Display currDisplay = getWindowManager().getDefaultDisplay();// 获取屏幕当前分辨率int displayWidth = currDisplay.getWidth();int displayHeight = currDisplay.getHeight();one = displayWidth / 3; // 设置水平动画平移大小two = one * 2;}/** *  * 头标点击监听 3 */private class MyOnClickListener implements OnClickListener {private int index = 0;public MyOnClickListener(int i) {index = i;}public void onClick(View v) {viewPager.setCurrentItem(index);}}public class MyViewPagerAdapter extends PagerAdapter {private List<View> mListViews;public MyViewPagerAdapter(List<View> mListViews) {this.mListViews = mListViews;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(mListViews.get(position));}@Overridepublic Object instantiateItem(ViewGroup container, int position) {container.addView(mListViews.get(position), 0);return mListViews.get(position);}@Overridepublic int getCount() {return mListViews.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}}public class MyOnPageChangeListener implements OnPageChangeListener {int one = offset * 2;// 页卡1 -> 页卡2 偏移量int two = one * 2;// 页卡1 -> 页卡3 偏移量int three = one * 3;public void onPageScrollStateChanged(int arg0) {}public void onPageScrolled(int arg0, float arg1, int arg2) {}public void onPageSelected(int arg0) {Animation animation = new TranslateAnimation(one * currIndex, one* arg0, 0, 0);currIndex = arg0;animation.setFillAfter(true);// True:图片停在动画结束位置animation.setDuration(300);/** * Animation animation = null; switch (arg0) { case 0: * mTab1.setImageDrawable(getResources().getDrawable( * R.drawable.message_selected)); if (currIndex == 1) { animation = * new TranslateAnimation(one, 0, 0, 0); * mTab2.setImageDrawable(getResources().getDrawable( * R.drawable.news_unselected)); } else if (currIndex == 2) { * animation = new TranslateAnimation(two, 0, 0, 0); * mTab3.setImageDrawable(getResources().getDrawable( * R.drawable.setting_unselected)); } break; case 1: * mTab2.setImageDrawable(getResources().getDrawable( * R.drawable.message_unselected)); if (currIndex == 0) { animation * = new TranslateAnimation(zero, one, 0, 0); * mTab1.setImageDrawable(getResources().getDrawable( * R.drawable.news_selected)); } else if (currIndex == 2) { * animation = new TranslateAnimation(two, one, 0, 0); * mTab3.setImageDrawable(getResources().getDrawable( * R.drawable.setting_selected)); } break; case 2: * mTab3.setImageDrawable(getResources().getDrawable( * R.drawable.message_unselected)); if (currIndex == 0) { animation * = new TranslateAnimation(zero, two, 0, 0); * mTab1.setImageDrawable(getResources().getDrawable( * R.drawable.news_unselected)); } else if (currIndex == 1) { * animation = new TranslateAnimation(one, two, 0, 0); * mTab2.setImageDrawable(getResources().getDrawable( * R.drawable.setting_selected)); } break; } currIndex = arg0; * animation.setFillAfter(true);// True:图片停在动画结束位置 * animation.setDuration(150); mTabImg.startAnimation(animation); */}public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // 获取// back键if (menu_display) { // 如果 Menu已经打开 ,先关闭MenumenuWindow.dismiss();menu_display = false;} else {Intent intent = new Intent();intent.setClass(MainHaoDF.this, Exit.class);startActivity(intent);}}else if (keyCode == KeyEvent.KEYCODE_MENU) { // 获取 Menu键if (!menu_display) {// 获取LayoutInflater实例inflater = LayoutInflater.from(instance);// 这里的main布局是在inflate中加入的,以前都是直接this.setContentView()的// 该方法返回的是一个View的对象,是布局中的根layout = inflater.inflate(R.layout.main_menu, null);// 将layout加入到PopupWindow中menuWindow = new PopupWindow(layout,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);// 后两个参数是width和heightmenuWindow.showAtLocation(findViewById(R.id.usermain),Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);// 设置layout在PopupWindow中显示的位置mClose = (LinearLayout) layout.findViewById(R.id.menu_close);mCloseBtn = (LinearLayout) layout.findViewById(R.id.menu_close_btn);// 下面对每一个Layout进行单击事件的注册// 比如单击某个MenuItem的时候,他的背景色改变mCloseBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {Intent intent = new Intent();intent.setClass(MainHaoDF.this, Exit.class);startActivity(intent);menuWindow.dismiss(); // 响应点击事件之后关闭Menu}});menu_display = true;} else {// 如果当前已经为显示状态,则隐藏起来menuWindow.dismiss();menu_display = false;}return false;}return false;}public void exit_settings(View v) { // 退出 伪“对话框”,其实是一个activityIntent intent = new Intent(MainHaoDF.this, ExitFromSettings.class);startActivity(intent);}}}


                                             
0 0
原创粉丝点击