Android第六期 - ViewPage与菜单栏本地页面监听滑动效果

首先是JiaoyuzixunActivity.java代码部分:

package com.gaoxiaotong.ctone.jiaoyuzixun;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

import com.gaoxiaotong.ctone.entity.Jiaoyuzixun_ViewPage_Adapter;
import com.gaoxiaotong.ctone.entity.jianzhizhaopinAdapter;
import com.gaoxiaotong.ctone.jianzhizhaopin.JianzhizhaopinActivity;
import com.gaoxiaotong.info.Webserinfo;
import com.gaoxiaotongctone.MainActivity;
import com.gaoxiaotongctone.R;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.AdapterViewFlipper;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.RadioGroup.OnCheckedChangeListener;

/**
 * HorizontalScrollView和ViewPager联动效果 上面为HorizontalScrollView,下面为ViewPager
 **/
public class JiaoyuzixunActivity extends Activity implements
		OnCheckedChangeListener {
	private ProgressDialog dialog;
	private ProgressBar progressBar;
	private HashMap<Integer, Integer> hMap;
	private int pageIndex;
	private boolean load_pagesize;
	private int thePage;
	/**
	 * 设置布局显示属性
	 */
	private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
			LinearLayout.LayoutParams.WRAP_CONTENT,
			LinearLayout.LayoutParams.WRAP_CONTENT);
	/**
	 * 设置布局显示目标最大化属性
	 */
	private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
			LinearLayout.LayoutParams.MATCH_PARENT,
			LinearLayout.LayoutParams.MATCH_PARENT);
	private LinearLayout loadingLayout;

	private TextView texview_back;
	private RadioGroup mRadioGroup;
	private RadioButton mRadioButton1;
	private RadioButton mRadioButton2;
	private RadioButton mRadioButton3;
	private RadioButton mRadioButton4;
	private RadioButton mRadioButton5;
	private RadioButton mRadioButton6;
	private ImageView mImageView;
	private float mCurrentCheckedRadioLeft;// 当前被选中的RadioButton距离左侧的距离
	private HorizontalScrollView mHorizontalScrollView;// 上面的水平滚动控件
	private ViewPager mViewPager; // 下方的可横向拖动的控件
	private ArrayList<View> mViews;// 用来存放下方滚动的layout(layout_1,layout_2,layout_3)

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.title_bar_education);
		iniController();
		iniListener();
		iniVariable();
		mRadioButton1.setChecked(true);
		mViewPager.setCurrentItem(1);
		mCurrentCheckedRadioLeft = getCurrentCheckedRadioLeft();
		// 返回
		texview_back.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(JiaoyuzixunActivity.this,
						MainActivity.class);
				startActivity(intent);
				JiaoyuzixunActivity.this.finish();
			}
		});
		// 绑定考研,专升本等等部分

	}

	/**
	 * AsyncTask异步加载部分操作
	 */
	public class MyTaskJianzhi1 extends
			AsyncTask<String, Void, List<Map<String, Object>>> {
		private ListView lvCont;
		private jianzhizhaopinAdapter adapter;
		private int index;

		// 判断适配器是否被置空部分
		public MyTaskJianzhi1(ListView lvCont, jianzhizhaopinAdapter jzzpAdapter) {
			super();
			this.lvCont = lvCont;
			if (jzzpAdapter == null) {
				adapter = new jianzhizhaopinAdapter(JiaoyuzixunActivity.this);
			} else {
				adapter = jzzpAdapter;
			}
		}

		// 下载提示框
		@Override
		protected void onPreExecute() {
			// TODO Auto-generated method stub
			super.onPreExecute();
			dialog = new ProgressDialog(JiaoyuzixunActivity.this);
			dialog.setTitle("提示");
			dialog.setMessage("正在下载,请稍后....");
			dialog.show();
		}

		// 操作结束部分
		@Override
		protected void onPostExecute(List<Map<String, Object>> result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
			// 绑定考研,专升本部分

			String aa = "";
			try {
				if (thePage == 1) {
					adapter.setData(result);
					lvCont.setAdapter(adapter);
				}
				if (result.size() == 0) {
					loadingLayout.setVisibility(View.GONE);
				}
				adapter.notifyDataSetChanged();
			} catch (Exception e) {
				// TODO: handle exception
				e.getMessage();
				e.printStackTrace();
			}
			dialog.dismiss();
		}

		// 获取数据操作部分
		@Override
		protected List<Map<String, Object>> doInBackground(String... params) {
			// TODO Auto-generated method stub
			List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
			// 链接网络,获取json,解析数据
			try {
				Webserinfo wsWebserinfo = new Webserinfo();
				JSONArray data = new JSONArray();
				if (pageIndex == 0) {
					data = wsWebserinfo.jobsByType("" + Webserinfo.pageSize,
							"2", "" + thePage);
				} else if (pageIndex == 1) {
					data = wsWebserinfo.jobsByType("" + Webserinfo.pageSize,
							"1", "" + thePage);
				} else if (pageIndex == 2) {
					data = wsWebserinfo.jobsByType("" + Webserinfo.pageSize,
							"3", "" + thePage);
				}
				if (data.length() < 10) {
					load_pagesize = false;
				}
				for (int i = 0; i < data.length(); i++) {
					JSONObject jsonObj = data.getJSONObject(i);
					HashMap<String, Object> map = new HashMap<String, Object>();
					// 迭代输出json的key作为map的key
					Iterator<String> iterator = jsonObj.keys();
					while (iterator.hasNext()) {
						String key = iterator.next();
						Object value = jsonObj.get(key);
						map.put(key, value);
					}
					if (thePage > 1) {
						adapter.addItem(map);
					}
					list.add(map);
				}
			} catch (Exception e) {
				// TODO: handle exception
			}
			return list;
		}
	}

	private void iniVariable() {
		// TODO Auto-generated method stub
		mViews = new ArrayList<View>();
		mViews.add(getLayoutInflater().inflate(R.layout.layout_0, null));
		mViews.add(getLayoutInflater().inflate(R.layout.layout_1, null));
		mViews.add(getLayoutInflater().inflate(R.layout.layout_2, null));
		mViews.add(getLayoutInflater().inflate(R.layout.layout_3, null));
		mViews.add(getLayoutInflater().inflate(R.layout.layout_4, null));
		mViews.add(getLayoutInflater().inflate(R.layout.layout_5, null));
		mViews.add(getLayoutInflater().inflate(R.layout.layout_6, null));
		mViews.add(getLayoutInflater().inflate(R.layout.layout_0, null));
		mViewPager.setAdapter(new Jiaoyuzixun_ViewPage_Adapter(mViews));// 设置ViewPager的适配器
	}

	/**
	 * RadioGroup点击CheckedChanged监听
	 */
	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {

		AnimationSet _AnimationSet = new AnimationSet(true);
		TranslateAnimation _TranslateAnimation;

		Log.i("zj", "checkedid=" + checkedId);
		if (checkedId == R.id.btn1) {
			_TranslateAnimation = new TranslateAnimation(
					mCurrentCheckedRadioLeft, getResources().getDimension(
							R.dimen.rdo1), 0f, 0f);
			_AnimationSet.addAnimation(_TranslateAnimation);
			_AnimationSet.setFillBefore(false);
			_AnimationSet.setFillAfter(true);
			_AnimationSet.setDuration(100);
			mImageView.startAnimation(_AnimationSet);// 开始上面蓝色横条图片的动画切换
			// mImageView.setLayoutParams(_LayoutParams1);
			mViewPager.setCurrentItem(1);// 让下方ViewPager跟随上面的HorizontalScrollView切换
		} else if (checkedId == R.id.btn2) {
			_TranslateAnimation = new TranslateAnimation(
					mCurrentCheckedRadioLeft, getResources().getDimension(
							R.dimen.rdo2), 0f, 0f);
			_AnimationSet.addAnimation(_TranslateAnimation);
			_AnimationSet.setFillBefore(false);
			_AnimationSet.setFillAfter(true);
			_AnimationSet.setDuration(100);
			mImageView.startAnimation(_AnimationSet);
			mViewPager.setCurrentItem(2);
		} else if (checkedId == R.id.btn3) {
			_TranslateAnimation = new TranslateAnimation(
					mCurrentCheckedRadioLeft, getResources().getDimension(
							R.dimen.rdo3), 0f, 0f);
			_AnimationSet.addAnimation(_TranslateAnimation);
			_AnimationSet.setFillBefore(false);
			_AnimationSet.setFillAfter(true);
			_AnimationSet.setDuration(100);
			mImageView.startAnimation(_AnimationSet);
			mViewPager.setCurrentItem(3);
		} else if (checkedId == R.id.btn4) {
			_TranslateAnimation = new TranslateAnimation(
					mCurrentCheckedRadioLeft, getResources().getDimension(
							R.dimen.rdo4), 0f, 0f);
			_AnimationSet.addAnimation(_TranslateAnimation);
			_AnimationSet.setFillBefore(false);
			_AnimationSet.setFillAfter(true);
			_AnimationSet.setDuration(100);
			mImageView.startAnimation(_AnimationSet);
			mViewPager.setCurrentItem(4);
		} else if (checkedId == R.id.btn5) {
			_TranslateAnimation = new TranslateAnimation(
					mCurrentCheckedRadioLeft, getResources().getDimension(
							R.dimen.rdo5), 0f, 0f);
			_AnimationSet.addAnimation(_TranslateAnimation);
			_AnimationSet.setFillBefore(false);
			_AnimationSet.setFillAfter(true);
			_AnimationSet.setDuration(100);
			mImageView.startAnimation(_AnimationSet);

			mViewPager.setCurrentItem(5);
		} else if (checkedId == R.id.btn6) {
			_TranslateAnimation = new TranslateAnimation(
					mCurrentCheckedRadioLeft, getResources().getDimension(
							R.dimen.rdo6), 0f, 0f);
			_AnimationSet.addAnimation(_TranslateAnimation);
			_AnimationSet.setFillBefore(false);
			_AnimationSet.setFillAfter(true);
			_AnimationSet.setDuration(100);
			mImageView.startAnimation(_AnimationSet);
			mViewPager.setCurrentItem(6);
		}
		mCurrentCheckedRadioLeft = getCurrentCheckedRadioLeft();// 更新当前蓝色横条距离左边的距离
		mHorizontalScrollView.smoothScrollTo((int) mCurrentCheckedRadioLeft
				- (int) getResources().getDimension(R.dimen.rdo2), 0);
	}

	/**
	 * 获得当前被选中的RadioButton距离左侧的距离
	 */
	private float getCurrentCheckedRadioLeft() {
		// TODO Auto-generated method stub
		if (mRadioButton1.isChecked()) {
			return getResources().getDimension(R.dimen.rdo1);
		} else if (mRadioButton2.isChecked()) {
			return getResources().getDimension(R.dimen.rdo2);
		} else if (mRadioButton3.isChecked()) {
			return getResources().getDimension(R.dimen.rdo3);
		} else if (mRadioButton4.isChecked()) {
			return getResources().getDimension(R.dimen.rdo4);
		} else if (mRadioButton5.isChecked()) {
			return getResources().getDimension(R.dimen.rdo5);
		} else if (mRadioButton6.isChecked()) {
			return getResources().getDimension(R.dimen.rdo6);
		}
		return 0f;
	}

	/**
	 * 监听部分操作
	 */
	private void iniListener() {
		// TODO Auto-generated method stub
		mRadioGroup.setOnCheckedChangeListener(this);
		mViewPager.setOnPageChangeListener(new MyPagerOnPageChangeListener());
	}

	private void iniController() {
		// TODO Auto-generated method stub
		mRadioGroup = (RadioGroup) findViewById(R.id.radioGroup);
		mRadioButton1 = (RadioButton) findViewById(R.id.btn1);
		mRadioButton2 = (RadioButton) findViewById(R.id.btn2);
		mRadioButton3 = (RadioButton) findViewById(R.id.btn3);
		mRadioButton4 = (RadioButton) findViewById(R.id.btn4);
		mRadioButton5 = (RadioButton) findViewById(R.id.btn5);
		mRadioButton6 = (RadioButton) findViewById(R.id.btn6);
		mImageView = (ImageView) findViewById(R.id.img1);
		texview_back = (TextView) findViewById(R.id.back_activity_button);
		mHorizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontalScrollView);
		mViewPager = (ViewPager) findViewById(R.id.pager);
	}

	/**
	 * ViewPager的PageChangeListener(页面改变的监听器)
	 */
	private class MyPagerOnPageChangeListener implements OnPageChangeListener {

		@Override
		public void onPageScrollStateChanged(int arg0) {
			// TODO Auto-generated method stub
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// TODO Auto-generated method stub
		}

		/**
		 * 滑动ViewPager的时候,让上方的HorizontalScrollView自动切换
		 */
		@Override
		public void onPageSelected(int position) {
			// TODO Auto-generated method stub
			if (position == 0) {
				mViewPager.setCurrentItem(1);
			} else if (position == 1) {
				mRadioButton1.performClick();
			} else if (position == 2) {
				mRadioButton2.performClick();
			} else if (position == 3) {
				mRadioButton3.performClick();
			} else if (position == 4) {
				mRadioButton4.performClick();
			} else if (position == 5) {
				mRadioButton5.performClick();
			} else if (position == 6) {
				mRadioButton6.performClick();
			} else if (position == 7) {
				mViewPager.setCurrentItem(6);
			}

		}
	}

	// back键
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
			Intent intent = new Intent();
			intent.setClass(JiaoyuzixunActivity.this, MainActivity.class);
			JiaoyuzixunActivity.this.startActivity(intent);
			JiaoyuzixunActivity.this.finish();
		} else {
			return false;
		}
		return super.onKeyDown(keyCode, event);
	}

}

dimens.xml部分,控制菜单栏显示条目效果:

<resources>
    <dimen name="padding_small">8dp</dimen>
    <dimen name="padding_medium">8dp</dimen>
    <dimen name="padding_large">16dp</dimen>
    <dimen name="rdo1">0dp</dimen>
    <dimen name="rdo2">100dp</dimen>
    <dimen name="rdo3">200dp</dimen>
    <dimen name="rdo4">300dp</dimen>
    <dimen name="rdo5">400dp</dimen>
    <dimen name="rdo6">500dp</dimen>
</resources>

过度页面layout_0.xml部分:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@android:color/darker_gray">
</LinearLayout>

显示页面其中一个样式layout_1.xml部分:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/darker_gray"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView_showMessages"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:text="A"
        android:textColor="#33b5e5"
        android:textSize="240sp" />

</LinearLayout>

效果图:

Android第六期 - ViewPage与菜单栏本地页面监听滑动效果,布布扣,bubuko.com

时间: 2024-10-07 06:31:16

Android第六期 - ViewPage与菜单栏本地页面监听滑动效果的相关文章

android基础之点击监听器的2种监听实现

点击监听器接口:onClickListener 抽象函数 onClick(View v) 有2个方法实现监听: 1:当前类继承点击监听器接口 package com.example.button; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; im

Android进阶:ListView性能优化异步加载图片 使滑动效果流畅

ListView 是一种可以显示一系列项目并能进行滚动显示的 View,每一行的Item可能包含复杂的结构,可能会从网络上获取icon等的一些图标信息,就现在的网络速度要想保持ListView运行的很好滚动流畅是做不到的 所以这里就需要把这些信息利用多线程实现异步加载 实现这样功能的类 [java] view plaincopy public class AsyncImageLoader { private HashMap<String, SoftReference<Drawable>&

【android学习】安卓设备实现触摸事件的监听,跨进程事件注入

最近想实现触摸屏的事件记录,并且分别做时间戳标记,类似于adb shell 下的getevent/setevent,查了很多资料,下面是一些总结. 实现方法: 1.利用onclick方法等.这种方法只能用于自己的Activity和View中,如果要检测其他Activity,比如键盘就不行了. 2.从linux内核入手.在事件分发前截获事件,可以对任意Activity实现事件捕获. android触摸事件的流程: http://blog.csdn.net/sunnyfans/article/det

Android: ScrollView监听滑动到顶端和底端

在项目中需要监听ScrollView滑动到顶端和底端的时候以实现自己的ScrollView,那么怎样去监听呢?今天查看了一下ScrollView的源码,找到了一种方法.先看一下源码中的overScrollBy()方法: 1 protected boolean overScrollBy(int deltaX, int deltaY, 2 int scrollX, int scrollY, 3 int scrollRangeX, int scrollRangeY, 4 int maxOverScro

android用最简单的方法实现QQ5.0的侧边栏滑动效果

先看个效果 使用两个开源项目 开源侧边栏 :me.tangke.slidemenu 开源动画:nineoldandroids-2.4.0.jar 在项目里我使用的是左边activity,右边activity的样式,activityGroup的方式,如果全用Fragment也是一样的,只要获取Fragment的rootView即可; 滑动时用me.tangke.slidemenu是为获取拖动屏幕的比例,其他的菜单栏也可以使用,只是加个动画; 界面所有逻辑代码不动,使用nineoldandroids

Android真正简单的教程-第十二枪(ViewFlipper实现滑动效果)

直接看代码 1.MainActivity.java: package org.yayun.demo; import android.app.Activity; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.ViewGroup.LayoutParams; import android.view.animation.

Android耳机线控详解,蓝牙耳机按钮监听(仿酷狗线控效果)

转载请注明出处:http://blog.csdn.net/fengyuzhengfan/article/details/46461253 当耳机的媒体按键被单击后,Android系统会发出一个广播,该广播的携带者一个Action名为MEDIA_BUTTON的Intent.监听该广播便可以获取手机的耳机媒体按键的单击事件. 在Android中有个AudioManager类,该类会维护MEDIA_BUTTON广播的分发,所以要实现耳机按键监听需要向AudioManager注册一个用于接收耳机按键单击

Android OkHttp文件上传与下载的进度监听扩展

相信大家对OkHttp也是相当的熟悉了,毕竟是Square的东西,对于其种种优点,这里也不再叙说.优秀是优秀,但是毕竟优秀的东西给我们封装了太多,那么问题来了,我们使用OkHttp作为我们的网络层,简单地进行GET/POST请求是毫无问题.近日看了产品的设计稿,毛估估会有文件的上传与下载的需求,如果使用OkHttp作为网络层进行封装,你会惊讶的发现,简直封装的太"完美"了.如果现在有这么一个需求,要求对文件进行上传或下载,但是在上传或者下载前,你需要给用户一个友好的提示,在上传或者下载

Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制

做这个功能是因为开发项目的时候,由于后台接口的一些参数的值的长度有要求,不能超过多少个字符,所以在编辑框中输入的字符是要有限制的. 下面就来看一下demo的实现过程: 首先,在xml控件中放置一个EditText控件,然后初始化该控件并对该控件添加文本监听.xml自己简单的设计一下,代码较为简单,直接上代码: package com.example.edittext; import android.app.Activity; import android.os.Bundle; import an