Android中TabHost应用-支持点击和手势滑动

        这几天参与的项目中用到了TabHost,开始的时候已经实现了其点击事件处理的效果,今天突然想到现在一些软件都支持滑动就在其上面加上滑动切换Activity的效果。

         主要的方法就是点击处理时间,和滑动处理事件以及二者的同步。

           点击处理时间代码如下         

mTabHost = this.getTabHost();

		mTabHost.addTab(mTabHost
				.newTabSpec("TAG1")
				.setIndicator("TAG1")
				.setContent(
						new Intent(IPCViewActivity.this, IPCListActivity.class)));
		mTabHost.addTab(mTabHost
				.newTabSpec("TAG2")
				.setIndicator("TAG2")
				.setContent(
						new Intent(IPCViewActivity.this, IPCOtherActivity.class)));
		mTabHost.addTab(mTabHost
				.newTabSpec("TAG3")
				.setIndicator("TAG3")
				.setContent(
						new Intent(IPCViewActivity.this,
								IPCSettingActivity.class)));
		
		friend = (RadioButton) findViewById(R.id.tab_friend);
		search = (RadioButton) findViewById(R.id.tab_search);
		setting = (RadioButton) findViewById(R.id.tab_setting);
		// 设置当前显示哪一个标签
		mTabHost.setCurrentTab(0);

		friend.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				
				mTabHost.setCurrentTabByTag("TAG1");
				currentView = 0;
				
			}
		});

		search.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub

				
				mTabHost.setCurrentTabByTag("TAG2");
				currentView = 1;
				
			}
		});

		setting.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				mTabHost.setCurrentTabByTag("TAG3");
				currentView = 2;
				
			}
		});

滑动处理代码如下:

gestureDetector = new GestureDetector(new MyGestureDetector());
		listener = new View.OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				return gestureDetector.onTouchEvent(event);
			}
		};

class MyGestureDetector extends SimpleOnGestureListener {
		@Override
		/**
		 * @param e1 第一个ACTION_DOWN MotionEvent并且只有一个
		 * @param e2 最后一个ACTION_MOVE MotionEvent
		 * @param velocityX X轴上的移动速度,像素/秒
		 * @param velocityY Y轴上的移动速度,像素/秒
		 */
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY) {
			// TODO Auto-generated method stub
			try {
				// 从右向左滑动
				if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
						&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {

					if (currentView == maxTabIndex) {
						//currentView = 0;
					} else {
						currentView++;
					}
					mTabHost.setCurrentTab(currentView);
					
					// 从左向右滑动
				} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
						&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {

					if (currentView == 0) {
						//currentView = maxTabIndex;
					} else {
						currentView--;
					}
					mTabHost.setCurrentTab(currentView);
					
				}

			} catch (Exception e) {
				// TODO: handle exception
			}

			return false;
		}

	}

这样处理既可以通过按键切换Activity又可以通过滑动切换。

方法比较过时,但效果还可以!

你可能感兴趣的:(Android)