viewpager+fragment+HorizontalScrollView
xml布局
<RelativeLayout
android:id="@+id/rl_column"
android:layout_width="match_parent"
android:layout_height="40dp" >
<HorizontalScrollView
android:id="@+id/hsv"
android:layout_width="50dp"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/iamge_glide"
android:scrollbars="none"
android:background="#f0f0f0" >
<LinearLayout
android:id="@+id/id_gallery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="horizontal" />
</HorizontalScrollView>
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
activity代码
private HorizontalScrollView hsv;
private ViewPager vp;
String[] name = new String[] { "推荐", "热点", "娱乐", "科技", "汽车", "体育", "财经",
"军事", "国际", "时尚", "视屏", "社会" };
private SlidingMenu sm;
private LinearLayout mGallery;
private int mScreenWidth;
private int mItemWidth = 0;
private ArrayList<String> list;
private int columnSelectIndex = 0;
private ArrayList<Fragment> fragments = new ArrayList<Fragment>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
initView();
initData();
initTabColumn();
initFragment();
}
private void initTabColumn() {
// TODO Auto-generated method stub
initScrollView();
int count = list.size();
for (int i = 0; i < count; i++) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
mItemWidth, LayoutParams.WRAP_CONTENT);
params.leftMargin = 5;
params.rightMargin = 5;
TextView columnTextView = new TextView(NewActivity.this);
columnTextView.setGravity(Gravity.CENTER);
columnTextView.setPadding(5, 5, 5, 5);
columnTextView.setId(i);
columnTextView.setText(list.get(i));
// 设置默认标签为选中状态
if (columnSelectIndex == i) {
columnTextView.setSelected(true);
columnTextView.setTextColor(Color.RED);
}
/*
* 设置点击事件监听
*/
columnTextView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for (int j = 0; j < mGallery.getChildCount(); j++) {
TextView localView = (TextView) mGallery.getChildAt(j);
if (localView != v) {
localView.setSelected(false);
} else {
localView.setSelected(true);
vp.setCurrentItem(j);
}
}
int index = mGallery.indexOfChild(v);
}
});
mGallery.addView(columnTextView, i, params);
}
}
//把数组添加到list集合中
private void initData() {
list = new ArrayList<String>();
for (int i = 0; i < name.length; i++) {
list.add(name[i]);
}
System.out.println(list);
}
private void initView() {
//找控件id
image_head = (ImageView) findViewById(R.id.image_head);
right_head = (ImageView) findViewById(R.id.right_head);
hsv = (HorizontalScrollView) findViewById(R.id.hsv);
right_head = (ImageView) findViewById(R.id.iamge_glide);
vp = (ViewPager) findViewById(R.id.vp);
mGallery = (LinearLayout) findViewById(R.id.id_gallery);
//点击图片展示侧滑菜单
image_head.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
sm.showMenu();//显示侧滑菜单
}
});
public void initFragment() {
fragments.clear();
int count = list.size();
for (int i = 0; i < count; i++) {//根据list集合的长度创建fragment
Bundle data = new Bundle(); //传值给每个fragment
data.putString("text", list.get(i));
data.putInt("id", i);
MyFragment f = new MyFragment();
f.setArguments(data);
fragments.add(f);
}
MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(
getSupportFragmentManager(), fragments);
vp.setAdapter(adapter);
vp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
vp.setCurrentItem(arg0);
selectTab(arg0);
}
@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 selectTab(int tab_position) {
// TODO Auto-generated method stub
columnSelectIndex = tab_position;
View currTextView = mGallery.getChildAt(tab_position);
int w = currTextView.getMeasuredWidth();
int l = currTextView.getLeft();
int i2 = l + w / 2 - mScreenWidth / 2;
hsv.smoothScrollTo(i2, 0);
// 判断是否选中
for (int i = 0; i < mGallery.getChildCount(); i++) {
TextView eveTxetView = (TextView) mGallery.getChildAt(i);
boolean ischeck;
if (i == tab_position) {
ischeck = true;
eveTxetView.setTextColor(Color.RED);
} else {
ischeck = false;
eveTxetView.setTextColor(Color.BLACK);
}
eveTxetView.setSelected(ischeck);
}
}
private void initScrollView() {
mScreenWidth = NewsUtils.getWindowsWidth(NewActivity.this);
mItemWidth = mScreenWidth / 7;//计算HorizontalScrollView可以展示几个
mGallery.removeAllViews();
}
}
//NewsUtils内的计算代码
public class NewsUtils {
/** 获取屏幕的宽度 */
public final static int getWindowsWidth(Activity activity) {
DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}
}
viewpager+fragment+HorizontalScrollView的更多相关文章
- viewpager+fragment+HorizontalScrollView详细版
XML布局 <HorizontalScrollView android:id="@+id/hsv" android:layout_ ...
- Android ViewPager + Fragment的布局
ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...
- ViewPager+Fragment取消预加载(延迟加载)(转)
原文:http://www.2cto.com/kf/201501/368954.html 在项目中,都或多或少地使用的Tab布局,所以大都会用到ViewPager+Fragment,但是Fragmen ...
- Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...
- Android - ViewPager+Fragment初始化问题
Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题. ViewPager初始化时会预加载前后的2个页面,即 ...
- Android ViewPager Fragment使用懒加载提升性能
Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...
- ViewPager -- Fragment 切换卡顿 性能优化
当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即 Fragment需要加载UI内容,而又频繁地切换Fragment, ...
- viewpager viewpager+fragment
内页面 不单写页面 viewpager+布局 import java.util.ArrayList; import java.util.List; import android.os.Bundl ...
- 【原创】【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析
ViewPager中切换界面Fragment被销毁的问题分析 1.使用场景 ViewPager+Fragment实现界面切换,界面数量>=3 2.Fragment生命周期以及与Activ ...
随机推荐
- JQuery 内容过滤选择器
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Selenium2学习-030-WebUI自动化实战实例-028-获取元素位置及大小
自动化测试过程中,有时需要获取元素的位置.大小,以获取元素的位置,通过 Actions 模拟鼠标,进行相对坐标操作.例如,有些元素定位不方便,或者需要对某一元素相对区域范围进行暴力点击测试,此时就需要 ...
- DDS杂散频谱来源:谐波超Nyquist 折返
- Using dbms_shared_pool.purge to remove a single task from the library cache
我们都知道可是使用 alter system flush shared_pool 来清除shared pool 信息,当时不能指定清除某个对象.因为在系统繁忙的时侯 使用 alter system f ...
- java中String.valueOf()和toString()方法的区别
http://www.ztyhome.com/android-tostring-string-valueof-diff/
- Spring Boot 2 Swagger2
本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档. 它既可以减少我们创建文 ...
- [转][C++ 11]override and final - write clean and maintainable C++ code
原文: http://arne-mertz.de/2015/12/modern-c-features-override-and-final/ Today I write about a pair of ...
- loadview 方法调用
从官方文档看 不应该直接调用此方法,当控制器当前的view为空的时候,这个方法就会被调用,并且会创建一个空白的view,如果viewcontroller绑定了storyboard或者xib就不用说了. ...
- 使用UDEV绑定ASM多路径磁盘
OS版本:RHEL6.4 1) 找出目标磁盘的分区别名 # dmsetup ls |grep data data01 (253:9) data04 (253:4) data03 (253:3) dat ...
- Java基础之泛型——使用泛型链表类型(TryGenericLinkedList)
控制台程序 定义Point类: public class Point { // Create a point from its coordinates public Point(double xVal ...