package com.zj.horizontalsrollview;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
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.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.BaseAdapter;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
import com.zj.horizontalsrollview.test.Test;
/**
* HorizontalScrollView和ViewPager联动效果 上面为HorizontalScrollView,下面为ViewPager
*
* @author zj 2012-5-23 下午1:07:06
*/
public class MainActivity extends Activity implements OnCheckedChangeListener {
private Context context;
private int PagerCount = 3;
private int[] iDs;
private int CURRENTPAGE = 0;
private RadioGroup mRadioGroup;
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);
context = MainActivity.this;
setContentView(R.layout.dl_selfpunish_illegal_base_radio_group);
saveID();
iniController();
iniListener();
initVariable();
RadioButton rb = (RadioButton) mRadioGroup.getChildAt(0);
rb.setChecked(true);
mViewPager.setCurrentItem(1);
mCurrentCheckedRadioLeft = getCurrentCheckedRadioLeft(mRadioGroup);
}
private void saveID() {
// 保存ID的数组
iDs = new int[PagerCount];
for (int i = 0; i < PagerCount; i++) {
iDs[i] = i;
}
}
private void initVariable() {
mViews = new ArrayList<View>();
mViews.add(getLayoutInflater().inflate(R.layout.layout_0, null));
for (int i = 0; i < PagerCount; i++) {
View childList = (View)getLayoutInflater().inflate(R.layout.dl_selfpunish_illegal_child_list, null);
ListView childLV = (ListView)childList.findViewById(R.id.dl_selfpunish_illegal_child_list_lv);
IllegalMsgAdapter adapter = new IllegalMsgAdapter(i);
childLV.setAdapter(adapter);
// TextView tv = new TextView(context);
// tv.setText("测试:" + i);
mViews.add(childList);
}
mViews.add(getLayoutInflater().inflate(R.layout.layout_0, null));
mViewPager.setAdapter(new MyPagerAdapter());// 设置ViewPager的适配器
}
/**
* RadioGroup点击CheckedChanged监听
*/
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
AnimationSet _AnimationSet = new AnimationSet(true);
TranslateAnimation _TranslateAnimation;
for(int i=0;i<PagerCount;i++){
System.out.println("checkedId:"+checkedId+"--iDs[i]:"+iDs[i] + "PagerCount:"+PagerCount);
if (checkedId == iDs[i]) {
CURRENTPAGE = checkedId;
_TranslateAnimation = new TranslateAnimation(
mCurrentCheckedRadioLeft, dip2px(context, 100 * i), 0f, 0f);
_AnimationSet.addAnimation(_TranslateAnimation);
_AnimationSet.setFillAfter(true);
_AnimationSet.setDuration(300);
mImageView.startAnimation(_AnimationSet);// 开始上面蓝色横条图片的动画切换
mViewPager.setCurrentItem(i+1);// 让下方ViewPager跟随上面的HorizontalScrollView切换
}
}
mCurrentCheckedRadioLeft = getCurrentCheckedRadioLeft(mRadioGroup);// 更新当前蓝色横条距离左边的距离
mHorizontalScrollView.smoothScrollTo((int) mCurrentCheckedRadioLeft
- (int) getResources().getDimension(R.dimen.rdo2), 0);
}
/**
* 获得当前被选中的RadioButton距离左侧的距离
*/
private float getCurrentCheckedRadioLeft(RadioGroup mRadioGroup) {
// TODO Auto-generated method stub
int count = mRadioGroup.getChildCount();
for (int i = 0; i < count; i++) {
RadioButton childRB = (RadioButton) mRadioGroup.getChildAt(i);
if (childRB.getId() == iDs[i] && childRB.isChecked()) {
return dip2px(context, 100 * i);
}
}
return 0f;
}
private void iniListener() {
mRadioGroup.setOnCheckedChangeListener(this);
mViewPager.setOnPageChangeListener(new MyPagerOnPageChangeListener());
}
private void iniController() {
mRadioGroup = (RadioGroup) findViewById(R.id.radioGroup);
for (int i = 0; i < PagerCount; i++) {
RadioButton childLayout = (RadioButton) View.inflate(context,
R.layout.dl_selfpunish_illegal_base_radio_button, null);
childLayout.setId(iDs[i]);
childLayout.setText("川A1234" + i);
int px = dip2px(context, 100);
childLayout.setWidth(px);
mRadioGroup.addView(childLayout);
}
mImageView = (ImageView) findViewById(R.id.img1);
mHorizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontalScrollView);
mViewPager = (ViewPager) findViewById(R.id.pager);
}
private int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
/**
* ViewPager的适配器
*
* @author zj 2012-5-24 下午2:26:57
*/
private class MyPagerAdapter extends PagerAdapter {
@Override
public void destroyItem(View v, int position, Object obj) {
// TODO Auto-generated method stub
((ViewPager) v).removeView(mViews.get(position));
}
@Override
public void finishUpdate(View arg0) {
// TODO Auto-generated method stub
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mViews.size();
}
@Override
public Object instantiateItem(View v, int position) {
((ViewPager) v).addView(mViews.get(position));
return mViews.get(position);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View arg0) {
// TODO Auto-generated method stub
}
}
/**
* ViewPager的PageChangeListener(页面改变的监听器)
*
* @author zj 2012-5-24 下午3:14:27
*/
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) {
for(int i=0;i< PagerCount;i++){
if(position == 0){//0
mViewPager.setCurrentItem(1);
}else if(position == (PagerCount+1)){//7
mViewPager.setCurrentItem(PagerCount);
}else if(position == iDs[i]+1){
mRadioGroup.getChildAt(position - 1).performClick();
System.out.println("position1:"+position+"--iDs length:"+iDs.length);
for(int j=0;j<iDs.length;j++){
System.out.println("iDs"+j+":"+iDs[j]);
}
}
}
}
}
//===================================================适配器=======================================================
private class IllegalMsgAdapter extends BaseAdapter{
private int currentPage;
public IllegalMsgAdapter(int currentPage){
this.currentPage = currentPage;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
if(currentPage == 0){
return 3;
}else if(currentPage ==1){
return 2;
}else if(currentPage == 2){
return 1;
}else{
return 0;
}
}
@Override
publi
没有合适的资源?快使用搜索试试~ 我知道了~
Android ViewPager联动HorizontalScrollView
共56个文件
class:16个
xml:16个
png:8个
5星 · 超过95%的资源 需积分: 9 331 下载量 6 浏览量
2015-01-21
16:06:21
上传
评论
收藏 391KB RAR 举报
温馨提示
横向滑动的导航栏,并且联动底部的ViewPager。 实现思路: 1、首先让导航栏横向滑动:HorizontalScrollView中放RadioGroup,RadioGroup中放RadioButton。 2、底部为ViewPager。 3、通过设置ViewPager的页面改变来设置RadioButton的模拟点击事件。 4、监听RadioButton点击,来设置滑动的图片。
资源推荐
资源详情
资源评论
收起资源包目录
ZJ_HorizontalScrollView_整理3.rar (56个子文件)
ZJ_HorizontalScrollView
ZJ_HorizontalScrollView
.project 859B
project.properties 563B
proguard.cfg 1KB
src
com
zj
horizontalsrollview
MainActivity.java 8KB
test
Test.java 331B
AndroidManifest.xml 692B
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
id_category_selector.png 939B
drawable
radiobtn_selector.xml 269B
radiobtn_bg.xml 122B
drawable-mdpi
icon.png 3KB
layout
dl_selfpunish_illegal_item.xml 764B
layout_0.xml 291B
dl_selfpunish_illegal_child_list.xml 405B
dl_selfpunish_illegal_base_radio_group.xml 2KB
dl_selfpunish_illegal_base_radio_button.xml 298B
main.xml 2KB
anim
slide_to_right.xml 218B
slide_to_left.xml 219B
values
colors.xml 161B
strings.xml 186B
styles.xml 482B
dimens.xml 247B
.settings
org.eclipse.jdt.core.prefs 177B
assets
gen
com
zj
horizontalsrollview
BuildConfig.java 168B
R.java 3KB
libs
android-support-v4.jar 137KB
.classpath 541B
bin
resources.ap_ 17KB
classes
com
zj
horizontalsrollview
R$layout.class 681B
R$style.class 422B
R$dimen.class 527B
BuildConfig.class 361B
R$drawable.class 544B
R$attr.class 364B
MainActivity$IllegalMsgAdapter.class 2KB
R$id.class 766B
test
Test.class 727B
R$anim.class 459B
R.class 809B
R$string.class 451B
MainActivity.class 7KB
R$color.class 462B
MainActivity$MyPagerOnPageChangeListener.class 2KB
MainActivity$MyPagerAdapter.class 2KB
AndroidManifest.xml 692B
dexedLibs
annotations-a8af863fb69bb991cd81a9751a3cfa6d.jar 943B
android-support-v4-9043ee6065095c40965e09b13f97f9b3.jar 64KB
jarlist.cache 120B
res
crunch
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
id_category_selector.png 87B
drawable-mdpi
icon.png 2KB
ZJ_HorizontalScrollView.apk 89KB
classes.dex 242KB
共 56 条
- 1
CleanCup
- 粉丝: 60
- 资源: 79
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 物模块模型代码,前往设计物模块所属
- Java面试手册,助力大家面试过五关斩六将,面试成功
- HITK0303MP-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- mybatis动态sql之xml增删改查批量操作示例EmpMapper.xml
- C/C++内存检测工具Sanitizers
- HITK0302MP-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 宝塔批量建站工具,很优秀的宝塔管理工具,基于宝塔api
- HITK0204MP-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- azeryhgtfxhj
- 操作系统实验页面置换算法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页