横向滑动菜单HorizontalScrollView

public class MainActivity extends FragmentActivity {

private HorizontalScrollView hsv;//
    private LinearLayout nav_ll;//
    private ViewPager nav_vp;
    private int itemWidth;//
    private int selectItemIndex = 0;
    private int screenWidth;
    private List<String> type;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

type = MyTools.getType();

//
        hsv = (HorizontalScrollView) findViewById(R.id.nav_HorizontalScrollView);
        hsv.setHorizontalScrollBarEnabled(false);
        nav_ll = (LinearLayout) findViewById(R.id.nav_ll);

nav_vp = (ViewPager) findViewById(R.id.nav_vp);

//
        setNav();

//
        setViewPager();

}

private void setViewPager() {
        //
        List<Fragment> fragmentList = new ArrayList<Fragment>();
        for (int i = 0; i < MyTools.getType().size(); i++) {

MyFragment frame = new MyFragment(type.get(i));
            //
            fragmentList.add(frame);
        }

//
        MyFragmentAdapter fragmentAdapter = new MyFragmentAdapter(
                getSupportFragmentManager(), fragmentList);
        nav_vp.setAdapter(fragmentAdapter);

//
        nav_vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset,
                    int positionOffsetPixels) {

}

@Override
            public void onPageSelected(int position) {
                nav_vp.setCurrentItem(position);
                selectType(position);
            }

@Override
            public void onPageScrollStateChanged(int state) {

}
        });
    }

private void setNav() {

//
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        screenWidth = metrics.widthPixels;
        //
        itemWidth = screenWidth / type.size();
        Log.i("---->", MyTools.getType().toString());
        for (int i = 0; i < MyTools.getType().size(); i++) {
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    itemWidth, RadioGroup.LayoutParams.WRAP_CONTENT);
            //
            params.leftMargin = 10;
            params.rightMargin = 10;

//
            TextView localTextView = new TextView(this);
            //
            localTextView.setText(MyTools.getType().get(i));
            localTextView.setTextSize(16.0f);
            localTextView.setBackgroundResource(R.drawable.nav_tv_bg);
            localTextView.setPadding(5, 15, 5, 15);
            localTextView.setGravity(Gravity.CENTER);
            if (selectItemIndex == i) {
                localTextView.setSelected(true);
            }
            //
            localTextView.setOnClickListener(new View.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);
                            nav_vp.setCurrentItem(i);
                        } else {
                            tv.setSelected(false);
                        }
                    }

}
            });
            nav_ll.addView(localTextView, i, params);
        }
    }

public 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 i2 = l + k / 2 - screenWidth / 2;//
            hsv.smoothScrollTo(i2, 0);
        }
        //
        for (int i = 0; i < nav_ll.getChildCount(); i++) {
            View view = nav_ll.getChildAt(i);
            if (tab_position == i) {
                view.setSelected(true);
            } else {
                view.setSelected(false);
            }
        }
    }
}

xml

<?xml version="1.0" encoding="utf-8"?>
<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">

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">

<HorizontalScrollView
            android:id="@+id/nav_HorizontalScrollView"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="9"
            android:fillViewport="false">

<LinearLayout
                android:id="@+id/nav_ll"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

</LinearLayout>
        </HorizontalScrollView>

</LinearLayout>
    <android.support.v4.view.ViewPager
        android:id="@+id/nav_vp"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>

时间: 2024-08-10 21:27:45

横向滑动菜单HorizontalScrollView的相关文章

Android横向滑动菜单

1.效果图: 2.项目地址: https://github.com/lynnchurch/HorizontalScrollMenu.git 3.使用示例代码: package com.example.horizontalscrollmenusample; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.lynnchurch.horizontalscrollmenu.Bas

Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38140505 自从Gallery被谷歌废弃以后,Google推荐使用ViewPager和HorizontalScrollView来实现Gallery的效果.的确HorizontalScrollView可以实现Gallery的效果,但是HorizontalScrollView存在一个很大的问题,如果你仅是用来展示少量的图片,应该是没问题的,但是如果我希望HorizontalScr

横向滑动的GridView

思路: GridView行数设置为一行,外面套一个HorizontalScrollView,代码中设置GridView宽度 xml代码 <HorizontalScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="none" > <LinearLayout android:lay

横向滑动的listview效果的实现方法,scrollview嵌套水平滑动的listview卡顿的解决方法

很多时候,界面需要实现横向滑动的listview效果.网络上有一种方法,自定义了HorizontalListView,用法同正常的listview,可实现水平滑动效果. 但是如果一个界面 为垂直滑动的scrollview嵌套水平滑动的listview的时候,滑动水平listview的时候,会很卡.我最近就遇到了这样的问题,一直把思路放在监听水平和垂直滑动手势,想实现滑动角度小于45的时候 垂直的scrollview 滑动效果被禁止.但是一直没有研究出来. 于是一个偶然的机会,灵光一闪,想到用Ho

Android学QQ空间相册浏览类型横向滑动效果显示多图片MyHorizontalScrollView

Android学QQ空间相册浏览类型横向滑动效果显示多图片MyHorizontalScrollView 我们来定制一下吧 布局文件:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="m

Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现

本文首发于CSDN博客,转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8714621 人人客户端有一个特效还是挺吸引人的,在主界面手指向右滑动,就可以将菜单展示出来,而主界面会被隐藏大部分,但是仍有左侧的一小部分同菜单一起展示. 据说人人客户端的这个特效是从facebook客户端模仿来的,至于facebook是不是又从其它地方模仿来的就不得而知了.好,今天我们就一起来实现这个效果,总之我第一次看到这个特效是在人人客户端看到的,我

android 单行gridview横向滑动的实现

android 单行gridview横向滑动的实现 首先重写下GridView HorizontalGridView.java public class HorizontalGridView extends GridView { public HorizontalGridView(Context context, AttributeSet attrs) { super(context, attrs); } public HorizontalGridView(Context context) {

自定义滑动菜单SlidingMenu

最近没事就模仿scdn客户端的左右侧滑效果,自定义了一个SlindingMenu,虽然github上已经有了相当成熟的SlindingMenu开源框架,但本博客旨在帮助更多同学理解SlidingMenu的原理,使使用起来更得心应手. 1.分析 首先对其实现进行分析,SlindingMenu的布局需要有两部分,一个是菜单(menu)的布局,一个是内容(content)的布局.两个布局横向排列,菜单布局在左,内容布局在右.初始化的时候将菜单布局向左偏移,以至于能够完全隐藏,这样内容布局就会完全显示在

iOS8 UICollectionView横向滑动demo

在iOS8中,scrollView和加载在它上面的点击事件会有冲突,所以做一个横向滑动的界面最好的选择就是UICollectionView. 这个效果可以用苹果公司提供的官方demo修改而来,下载地址https://github.com/SeniorZhai/LineLayout. 主要介绍涉及到的几个属性,在LineLayout.m文件中: //cell大小 self.itemSize = CGSizeMake(200, 250); //水平滑动 self.scrollDirection =