结构:

MainActivity.java

package com.qf.day21_hsviewpagerfragment_demo5;

import java.util.ArrayList;
import java.util.List; import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView; public class MainActivity extends FragmentActivity { private ViewPager viewPager;
private HorizontalScrollView hzScrollView;
private LinearLayout llContainer; private String[] titles ; private List<Fragment> list = new ArrayList<Fragment>(); private TextView[] tvs; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //初始化View
initView();
//初始化VIewPager
initViewPager();
//初始化导航书签
initTab();
} public void initTab(){
tvs = new TextView[titles.length];
for(int i=0;i<titles.length;i++){ TextView tv = new TextView(getApplicationContext());
tv.setText(" "+titles[i]);
tv.setTextSize(20);
tv.setTextColor(Color.BLUE);
tv.setGravity(Gravity.CENTER);
tv.setEnabled(true); tv.setTag(i);
tv.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
viewPager.setCurrentItem((Integer)v.getTag());
}
});
tvs[i] = tv;
llContainer.addView(tv); tvs[0].setEnabled(false);
tvs[0].setTextColor(Color.RED); } } public void initViewPager(){
//获取标题数据
titles = getResources().getStringArray(R.array.titles); for(int i=0;i<titles.length;i++){
MyFragment myFragment = MyFragment.getInstance(i+1);
list.add(myFragment);
} viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
viewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override
public void onPageSelected(int pos) {
//ViewPager 绑定 书签
setCurrentView(pos);
} @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 }
});
} //滑动ViewPager时 书签也到相应的位置 屏幕中心位置
public void setCurrentView(int pos){ for(int i=0;i<titles.length;i++){
tvs[i].setEnabled(true);
tvs[i].setTextColor(Color.BLUE);
}
tvs[pos].setEnabled(false);
tvs[pos].setTextColor(Color.RED); int screenWidth = getResources().getDisplayMetrics().widthPixels; //假设当前 pos书签 在中间位置
int leftlength = (screenWidth-tvs[pos].getWidth())/2; //获取偏移量
int offsetLength = tvs[pos].getLeft()-leftlength; //hzScrollView 进行移动 参数1:水平偏移量 参数2:垂直偏移量
hzScrollView.smoothScrollTo(offsetLength, 0); } public void initView() {
viewPager = (ViewPager) findViewById(R.id.viewPager);
hzScrollView = (HorizontalScrollView) findViewById(R.id.hzScrollView);
llContainer = (LinearLayout) findViewById(R.id.ll_container);
} public class MyAdapter extends FragmentPagerAdapter{ public MyAdapter(FragmentManager fm) {
super(fm);
} @Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
} @Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
} } }

MyFragment.java

package com.qf.day21_hsviewpagerfragment_demo5;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SimpleAdapter;
import android.widget.TextView; public class MyFragment extends ListFragment { private TextView tvShow; private int index =0; public static MyFragment getInstance(int index){
MyFragment myFragment = new MyFragment();
Bundle args = new Bundle();
args.putInt("index", index);
myFragment.setArguments(args);
return myFragment; } @Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity); Bundle bundle = getArguments();
if(bundle!=null){
index = bundle.getInt("index");
}
} @Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.fragment_layout, container, false); tvShow = (TextView) v.findViewById(R.id.tv_show);
return v;
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
switch (index) {
case 1:
tvShow.setText("您点击了书签1"); break;
case 2:
tvShow.setText("您点击了书签2");
break;
case 3:
tvShow.setText("您点击了书签3");
break;
case 4:
tvShow.setText("您点击了书签4");
break;
default:
break;
} SimpleAdapter adapter = new SimpleAdapter(
getActivity(),
loadNetWorkData(),
R.layout.item,
new String[]{"icon","title","content"},
new int[]{R.id.iv_item,R.id.title_item,R.id.content_item}); setListAdapter(adapter); } /**
* 假设从网络获取数据
* @return
*/
private List<Map<String,Object>> loadNetWorkData(){ List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for(int i=0;i<20;i++){
Map<String, Object> map = new HashMap<String, Object>();
map.put("icon", R.drawable.ic_launcher);
map.put("title", "郭XX大战曹XXX"+i+"tab"+index);
map.put("content", "降龙十八掌赢"+i+"tab"+index);
list.add(map); } return list; } @Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
} @Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
} @Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
} @Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
} @Override
public void onDestroyView() {
// TODO Auto-generated method stub
super.onDestroyView();
Log.e("AAA", "==onDestroyView=>");
} @Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.e("AAA", "==onDestroy=>");
} @Override
public void onDetach() {
// TODO Auto-generated method stub
super.onDetach();
Log.e("AAA", "==onDetach=>");
} //show() hide() 走当前的方法
@Override
public void onHiddenChanged(boolean hidden) {
// TODO Auto-generated method stub
super.onHiddenChanged(hidden); Log.e("AAA", "==onHiddenChanged=>");
} }

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <HorizontalScrollView
android:id="@+id/hzScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"
>
<LinearLayout
android:id="@+id/ll_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
></LinearLayout> </HorizontalScrollView>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#f00"
/>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
></android.support.v4.view.ViewPager> </LinearLayout>

fragment_layout.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:orientation="vertical" > <TextView
android:id="@+id/tv_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#f00"
android:text="AAA"
/>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView> </LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/iv_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
<TextView
android:id="@+id/title_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv_item"
android:text="name"
/>
<TextView
android:id="@+id/content_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv_item"
android:text="aaa"
android:layout_alignBottom="@id/iv_item"
/> </RelativeLayout>

21 viewPager--- hzScrollView ----llContainer的更多相关文章

  1. 21 ViewPager RadioGroup

    结构 MainActivity.java package com.qf.day21_viewpagerfragmentrg_demo4; import java.util.ArrayList; imp ...

  2. Android UI目录

    Android UI目录 序:最近一直想进阶android应用开发,虽然对一些相关的android知识都大体熟悉,但是自己的android知识体系,经不起推敲.经不起高手的垂问.经过几个月的努力学习, ...

  3. 【Android 界面效果21】Android ViewPager使用详解

    这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如 ...

  4. 【转】实现ViewPager懒加载的三种方法

    方法一 在Fragment可见时请求数据.此方案仍预加载了前后的页面,但是没有请求数据,只有进入到当前Framgent时才请求数据. 优点:实现了数据的懒加载缺点:一次仍是三个Framgment对象, ...

  5. ViewPager+Fragment取消预加载(延迟加载)(转)

    原文:http://www.2cto.com/kf/201501/368954.html 在项目中,都或多或少地使用的Tab布局,所以大都会用到ViewPager+Fragment,但是Fragmen ...

  6. ViewPager自动轮播

    Android使用ViewPager实现左右循环滑动及轮播效果   ViewPager是一个常用的android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候 ...

  7. 备忘-Android ViewPager 与Gallery滑动冲突解决方法

    解决方法,重新定义gallery,禁止触发pager的触摸事件 1 public class UserGallery extends Gallery implements OnGestureListe ...

  8. Android中Fragment+ViewPager的配合使用

    官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例.FragmentPa ...

  9. ViewPager切换滑动速度修改

    ViewPager的setCurrentItem 滑动速度是写死地 下面的方法可以修改,在此以做记录 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

随机推荐

  1. ES6(正则扩展)

    ES6中正则的扩展 正则新增特性 一.构造函数的变化 1.ES5中new一个正则对象方法 (一行中2个参数,二行中1个参数) (第一行中的第一个参数必须是字符串) 2.ES6中新增一种方法(构造函数) ...

  2. Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper

    Golang中操作数据库已经有现成的库"database/sql"可以用,但是"database/sql"只提供了最基础的操作接口: 对数据库中一张表的增删改查 ...

  3. [Luogu 2817]宋荣子的城堡

    Description saruka有一座大大的城堡!城堡里面有n个房间,每个房间上面都写着一个数字p[i].有一天,saruka邀请他的小伙伴LYL和 MagHSK来城堡里玩耍(为什么没有妹子),他 ...

  4. bzoj 3930: [CQOI2015]选数

    Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...

  5. CSS之绝对定位

    w3school定义: 绝对定位的元素的位置相对于最近的已定位祖先元素(这里的已定位指的是绝对定位或者相对定位),如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块. 对于定位的主要问题是要 ...

  6. mongo数据删除和游标

    数据删除 db.集合.remove(删除条件,是否只删除一个数据);默认删多条(false)true删除一条db.集合.remove({}) 删除所有元素但集合还在db.集合.drop() 删除集合 ...

  7. SignalR Progress

    Server public class ServerHub : Hub { public async Task<string> ALongTimeTask() { var p = new ...

  8. C# get 、set、索引器

    get 与 set C#类的属性有公有属性(public)和私有属性(private).如果直接将一个属性声明为public,则该类的任意实例可以随意获取或修改该属性的值,很不安全..NET Fram ...

  9. C++笔记002:VS2010报错:LINK fatal error LNK1123 转换到 COFF 期间失败文件无效或损坏

    原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 错误描述: 1>------ 已启动生成: 项目: FirstCode, 配置: Debug Win32 ------ 1>生 ...

  10. Oracle12c中SQL性能优化(SQL TUNING)新特性之自动重优化(automatic reoptimization)

    Oracle12c中的自动重优化 Oracle12c中的自适应查询优化有一系列不同特点组成.像自适应计划(AdaptivePlans)功能可以在运行时修改执行计划,但并不允许计划中连接顺序的改变.自动 ...