利用HorizontalScrollView加Viewpager实现多个的导航标题栏

小弟刚刚学安卓半年多,做一个东西时需要可滚动的导航标题栏,找不到原版的Demo,无奈根据自己的理解写了一个,效果不是很好,但是勉强可以用,有不明白的大家提一下,如果大家有好的意见或者谁有效果更好的推荐一下,大家一起学习。其中的横向滚动条是自己定义的有一个反弹的效果,大家不要那效果的话,可以用自己定义的。ps:第一次写博客,亦不知道该怎么介绍demo,也不知道该写些什么大家见谅啊

主Activity。那个

package com.example.pagerdemo;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
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.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.TextView;

import com.example.view.MyScrollView;

public class MainActivity extends Activity implements OnClickListener{
	private List<View> data;
	private TextView[] tv;
	private com.example.view.MyScrollView sc;
	private ViewPager viewpager;
	private PagerAdapter pAdapter;
	private int screenWidth;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
		viewpager.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int arg0) {
				// TODO Auto-generated method stub
				for(int i=0;i<tv.length;i++){
					tv[i].setTextSize(15);
					
					tv[i].setBackgroundResource(0);
				}
				tv[arg0].setTextSize(18);
				tv[arg0].setBackgroundResource(R.drawable.san_03);
				if(arg0>=4){
					sc.scrollBy((int) (0.25*screenWidth), 0);
				}else if(arg0<3){
					sc.scrollBy(-(int) (0.25*screenWidth), 0);
				}
			
			}
			
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub
				
			}
		});
	}
	
	private void init(){
		tv=new TextView[7];
		tv[0]=(TextView) findViewById(R.id.tv_dec_bar1);
		tv[1]=(TextView) findViewById(R.id.tv_dec_bar2);
		tv[2]=(TextView) findViewById(R.id.tv_dec_bar3);
		tv[3]=(TextView) findViewById(R.id.tv_dec_bar4);
		tv[4]=(TextView) findViewById(R.id.tv_dec_bar5);
		tv[5]=(TextView) findViewById(R.id.tv_dec_bar6);
		tv[6]=(TextView) findViewById(R.id.tv_dec_bar7);
		sc=(MyScrollView) findViewById(R.id.sc_dec);
		viewpager=(ViewPager) findViewById(R.id.viewpager1);
		data=new ArrayList<View>();
		data.add(LayoutInflater.from(this).inflate(R.layout.viewpager1, null));
		data.add(LayoutInflater.from(this).inflate(R.layout.viewpager2, null));
		data.add(LayoutInflater.from(this).inflate(R.layout.viewpager3, null));
		data.add(LayoutInflater.from(this).inflate(R.layout.viewpager1, null));
		data.add(LayoutInflater.from(this).inflate(R.layout.viewpager2, null));
		data.add(LayoutInflater.from(this).inflate(R.layout.viewpager3, null));
		data.add(LayoutInflater.from(this).inflate(R.layout.viewpager1, null));
		pAdapter=new MyViewPagerAdapter(MainActivity.this, data);
		viewpager.setAdapter(pAdapter);
//		获得屏宽
		WindowManager windowManager = getWindowManager();
		Display display = windowManager.getDefaultDisplay();
		screenWidth = display.getWidth();
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		for(int i=0;i<tv.length;i++){
			if(v==tv[i]){
				viewpager.setCurrentItem(i);
			}
		}
	}
	
}

Demo的源码我放到下载页了http://download.csdn.net/detail/jiangchao5411/6346361


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值