HorizontalScrollView随页面滑动
来源:互联网 发布:聊天软件数据库设计 编辑:程序博客网 时间:2024/05/15 11:38
效果展示:
首先看activity_main中的布局
<LinearLayout android:layout_width="match_parent" android:layout_height="35dp" android:orientation="horizontal"> <HorizontalScrollView android:id="@+id/Nav_Hsv" android:layout_width="0dp" android:layout_weight="9" android:layout_height="35dp" android:fillViewport="false"> <LinearLayout android:id="@+id/Nav_ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#eee" android:orientation="horizontal"> </LinearLayout> </HorizontalScrollView></LinearLayout><android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/>
再看Activity里的具体实现
public class ShouActivity extends FragmentActivity { private List<String> type; private int screenWidth; private int itemWidth; private int selectItemIndex = 0; private LinearLayout nav_ll; private ViewPager vp; private HorizontalScrollView hsv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); type = MyTools.getType(); hsv = (HorizontalScrollView) findViewById(R.id.Nav_Hsv); hsv.setHorizontalScrollBarEnabled(false); nav_ll = (LinearLayout) findViewById(R.id.Nav_ll); vp = (ViewPager) findViewById(R.id.vp); //设置导航栏菜单 setNav(); //设置viewpager setViewPager(); } //设置viewpager private void setViewPager() { // 实例化list集合存放fragment List<Fragment> fragmentList = new ArrayList<Fragment>(); //获取map集合中的数据,遍历集合 Map<String, String> data = MyTools.getData(); for(Map.Entry<String, String> entry : data.entrySet()){ //获取集合中的value值,这里指的是接口地址 MyFragment frame = new MyFragment(entry.getValue()); //放入集合 fragmentList.add(frame); } //设置viewpager适配器 vp.setAdapter(new MyFragmentpagerAdapter(getSupportFragmentManager(),fragmentList)); //设置viewpager监听 vp.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { vp.setCurrentItem(position); selectType(position); } @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 setNav() { //获得屏幕总宽度 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); screenWidth = metrics.widthPixels; //设置每个item的宽度 itemWidth = screenWidth/type.size(); for(int i=0;i<type.size();i++){ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT); //设置外边距 params.leftMargin = 10; params.rightMargin = 10; //创建Textview实例 TextView localTextView = new TextView(this); //设置tv的属性 localTextView.setText(type.get(i)); localTextView.setTextSize(15.0f); localTextView.setPadding(5, 9, 5, 9); localTextView.setGravity(Gravity.CENTER); if(i == 0){ localTextView.setTextColor(Color.RED); }else{ localTextView.setTextColor(Color.parseColor("#666666")); } if(selectItemIndex == i){ localTextView.setSelected(true); } //设置每个tv的监听 localTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { for(int i=0;i<nav_ll.getChildCount();i++){ TextView tv = (TextView) nav_ll.getChildAt(i); if(tv == v){ tv.setSelected(true); vp.setCurrentItem(i); }else{ tv.setSelected(false); } } } }); nav_ll.addView(localTextView, i, params); } } protected void selectType(int tab_position) { selectItemIndex = tab_position; //通过自动滚动 for(int i=0;i<nav_ll.getChildCount();i++){ TextView tv0 = (TextView) nav_ll.getChildAt(tab_position); int k = tv0.getMeasuredWidth(); int l = tv0.getLeft(); int j = l+k/2-screenWidth/2;//计算要滚动到的位置 hsv.smoothScrollTo(j, 0); } //判断哪一个tv被选中设置字体颜色 for(int i=0;i<nav_ll.getChildCount();i++){ TextView view = (TextView) nav_ll.getChildAt(i); if(tab_position == i){ view.setTextColor(Color.RED); view.setSelected(true); }else{ view.setTextColor(Color.parseColor("#666666")); view.setSelected(false); } } }}
MyTools.java
public class MyTools { public static Map<String,String> getData(){ Map<String,String> map = new LinkedHashMap<String, String>(); map.put("推荐", "http://ic.snssdk.com/2/article/v25/stream/?category=news_world&count=20&min_behot_time=1457664837&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.040363&bd_longitude=116.299497&bd_loc_time=1457665192&loc_mode=6&iid=3839775475&device_id=12246433856&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=HONOR%20H30-L02&os_api=19&os_version=4.4.2&uuid=864503020467518&openudid=58561e2e62ae7a9d"); map.put("热点", "http://ic.snssdk.com/2/article/v25/stream/?category=news_hot&count=20&min_behot_time=1457678235&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.040344&bd_longitude=116.299473&bd_loc_time=1457746072&loc_mode=6&iid=3839775475&device_id=12246433856&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=HONOR%20H30-L02&os_api=19&os_version=4.4.2&uuid=864503020467518&openudid=58561e2e62ae7a9d"); map.put("北京", "http://lf.snssdk.com/2/article/v25/stream/?category=news_local&count=20&min_behot_time=1457679653&loc_mode=4&user_city=%E5%8C%97%E4%BA%AC&lac=4530&cid=28615&iid=3840045724&device_id=12248484527&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=MX5&os_api=22&os_version=5.1&uuid=868773026086424&openudid=8731cb97031b705c"); map.put("社会", "http://ic.snssdk.com/2/article/v25/stream/?category=news_society&count=20&min_behot_time=1457665368&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1457678205&loc_mode=5&lac=4527&cid=28883&iid=3837100257&device_id=12226275484&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=iToolsAVM&os_api=19&os_version=4.4.4&uuid=352284046469130&openudid=84c1c7b192991cc6"); map.put("娱乐", "http://ic.snssdk.com/2/article/v25/stream/?category=news_entertainment&count=20&min_behot_time=1457661848&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.040344&bd_longitude=116.299473&bd_loc_time=1457746072&loc_mode=6&iid=3839775475&device_id=12246433856&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=HONOR%20H30-L02&os_api=19&os_version=4.4.2&uuid=864503020467518&openudid=58561e2e62ae7a9d"); map.put("科技", "http://ic.snssdk.com/2/article/v25/stream/?category=news_tech&count=20&min_behot_time=1457664599&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.040344&bd_longitude=116.299473&bd_loc_time=1457746072&loc_mode=6&iid=3839775475&device_id=12246433856&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=HONOR%20H30-L02&os_api=19&os_version=4.4.2&uuid=864503020467518&openudid=58561e2e62ae7a9d"); map.put("体育", "http://ic.snssdk.com/2/article/v25/stream/?category=news_sports&count=20&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.040344&bd_longitude=116.299473&bd_loc_time=1457746072&loc_mode=6&iid=3839775475&device_id=12246433856&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=HONOR%20H30-L02&os_api=19&os_version=4.4.2&uuid=864503020467518&openudid=58561e2e62ae7a9d"); map.put("视频", "http://ic.snssdk.com/2/article/v25/stream/?category=video&count=20&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1457678205&loc_mode=5&lac=4527&cid=28883&iid=3837100257&device_id=12226275484&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=iToolsAVM&os_api=19&os_version=4.4.4&uuid=352284046469130&openudid=84c1c7b192991cc6"); map.put("财经", "http://lf.snssdk.com/2/article/v25/stream/?category=news_finance&count=20&loc_mode=4&iid=3839898905&device_id=10679574422&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=MX5&os_api=22&os_version=5.1&uuid=867992020732921&openudid=db1bf632ed3a9c71"); return map; } public static List<String> getType(){ List<String> typelist = Arrays.asList("推荐", "热点", "北京","社会", "娱乐", "科技","体育","视频","财经"); return typelist; }}
0 0
- HorizontalScrollView随页面滑动
- HorizontalScrollView滑动
- 利用 HorizontalScrollView 实现滑动页面时的缩放效果
- HorizontalScrollView 自动滑动
- 横向滑动HorizontalScrollView+Gridview
- HorizontalScrollView 滑动处理
- android 横向滑动 HorizontalScrollView
- HorizontalScrollView之水平滑动
- Android HorizontalScrollView左右滑动
- HorizontalScrollView横向滑动
- HorizontalScrollView横向滑动
- HorizontalScrollView 横向滑动菜单
- HorizontalScrollView头部滑动
- 【FastDev4Android框架开发】HorizontalScrollView,Fragment,FragmentStatePagerAdapter打造网易新闻Tab及滑动页面效果(三十六)
- HorizontalScrollView,Fragment,FragmentStatePagerAdapter打造网易新闻Tab及滑动页面效果(三十六)
- HorizontalScrollView实现listView 横向滑动
- HorizontalScrollView滑动冲突的问题
- 解决HorizontalScrollView自动滑动问题
- IPTV盒子与网络机顶盒子的区别
- Linux基础知识集锦
- 时间管理四代理论发展
- C 与MYSQL
- 项目在iOS模拟器上运行正常,但是在iOS9测试版系统上运行,网络请求失败
- HorizontalScrollView随页面滑动
- Android不安全的权限申请
- Android自定义下拉列表PopupWindow
- 123123123123
- 口译笔记符号大汇总
- iOS出现( linker command failed with exit code 1)错误总结
- Azure Machine Learning Studio 实例 -- 预测xx年的食物工厂总数
- android:descendantFocusability用法简析
- loading 进度条