`

HorizontalScrollView+RadioGroup+ViewPager+FragmentPagerAdapter基本结构

阅读更多
快速迭代用



import java.util.ArrayList;

import org.json.JSONObject;

import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.HorizontalScrollView;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.android.volley.Response.Listener;
import com.yirui.youbao.App;
import com.yirui.youbao.fragment.OrderListFragment;
import com.yirui.youbao.model.KeyValue;
import com.yirui.youbao.net.Commands;

/**
 * 订单管理
 * @author pythoner
 * 
 */
public class OrdersActivity extends BaseActivity implements View.OnClickListener {

	private Context context;
	private HorizontalScrollView hScrollView;
	private RadioGroup radioGroup;
	private ArrayList<KeyValue> tabs = new ArrayList<KeyValue>();
	private ViewPager viewPager;
	private FragmentPagerAdapter pagerAdapter;
	private Fragment[] fragments;
	private int curPosition=0;
	private KeyValue curKeyValue=null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_orders);
		context = this;
		initActionBar("", App.res.getDrawable(R.drawable.back), "订单管理", "创建订单",null);
		initViews();
	}

	@Override
	public void doRightButtonClick(View v) {
		Commands.doCommandOrderCreate(context, App.user,null,new Listener<JSONObject>() {
			@Override
			public void onResponse(JSONObject response){
				// TODO Auto-generated method stub
//				Log.i("tag", response.toString());
				if (isSuccess(response)) {
					showToast("创建订单成功");
				}
			}

		});
	}
	
	private void initViews() {
		//1:未确认;2:待支付;3:已支付;4:已使用;5;用户退订;6:停车场退订;7:退款中;8;已退款
		tabs.add(new KeyValue("1","待确认"));
		tabs.add(new KeyValue("2","待支付"));
		tabs.add(new KeyValue("3","已支付"));
		tabs.add(new KeyValue("4","已使用"));
		tabs.add(new KeyValue("5","用户退订"));
		tabs.add(new KeyValue("6","停车场退订"));
		tabs.add(new KeyValue("7","退款中"));
		tabs.add(new KeyValue("8","已退款"));
		
		initIndicator();
		initViewPager();
	}

	private void initIndicator(){
		hScrollView = (HorizontalScrollView) findViewById(R.id.hScrollView);
		radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
		for (int i = 0; i < tabs.size(); i++){
            KeyValue tag = tabs.get(i);
            RadioButton child = (RadioButton) LayoutInflater.from(context).inflate(R.layout.rb_for_orders, null);
            child.setId(i);
            child.setTag(tag);
            child.setText(tag.getSecond());
            child.setBackgroundResource(R.drawable.bg_radio_forum);
            child.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v){
                    // TODO Auto-generated method stub
                    int id = v.getId();
                    viewPager.setCurrentItem(id);
                    curPosition=id;
                    curKeyValue = (KeyValue) v.getTag();
                }
            });

            if(i==curPosition){
            	child.setChecked(true);
            }
            radioGroup.addView(child);
        }
	}
	
	private void initViewPager(){
		fragments = new Fragment[tabs.size()];
		for(int i=0;i<tabs.size();i++){
			fragments[i] = OrderListFragment.newInstance(tabs.get(i));
		}

		pagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
			@Override
			public int getCount() {
				return fragments.length;
			}

			@Override
			public Fragment getItem(int position) {
				return fragments[position];
			}

		};

		viewPager = (ViewPager) findViewById(R.id.viewPager);
		viewPager.setOffscreenPageLimit(8);
		viewPager.setAdapter(pagerAdapter);
		viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener(){

            @Override
            public void onPageSelected(int position){
                // TODO Auto-generated method stub
                radioGroup.check(position);
                smoothScrollTo(position);
                curPosition=position;
                curKeyValue = tabs.get(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

            }
        });
		
		viewPager.setCurrentItem(curPosition);
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	}

	private void smoothScrollTo(final int position){
        final int w = radioGroup.getWidth() / radioGroup.getChildCount();
        new Handler().postDelayed((new Runnable(){
            @Override
            public void run(){
                hScrollView.smoothScrollTo(((RadioButton) radioGroup.getChildAt(position)).getLeft() - w, 0);
            }
        }), 5);
    }
	
}


布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg_gray"
    android:orientation="vertical" >

    <include layout="@layout/actionbar_comm" />

    <HorizontalScrollView
        android:id="@+id/hScrollView"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@android:color/white"
        android:cacheColorHint="@android:color/transparent"
        android:fadingEdge="none"
        android:fadingEdgeLength="0dp"
        android:gravity="center_vertical"
        android:overScrollMode="never"
        android:scrollbars="none" >

        <RadioGroup
            android:id="@+id/radioGroup"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            android:orientation="horizontal" >
        </RadioGroup>
    </HorizontalScrollView>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="16dp"
        android:background="@android:color/white"
        android:flipInterval="30"
        android:persistentDrawingCache="animation" />

</LinearLayout>


RadioButton --->rb_for_orders.xml
<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/radio"
    android:layout_height="match_parent"
    android:paddingTop="8dp"
    android:paddingBottom="8dp"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    android:textColor="@color/radio_textcolor_with_blue"
    />

RadioButton -->背景bg_radio_forum.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/line_bottom_with_blue_bold_for_forum" />
    <item android:state_checked="false">
        <shape>
			<solid android:color="@android:color/transparent" />
			<stroke android:width="0dp" android:color="@android:color/transparent" /> 
			<corners android:radius="0dp" />
		</shape>
    </item>
</selector>


RadioButton -->下划线line_bottom_with_blue_bold_for_forum.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:right="-3dp" android:left="-3dp" android:top="-3dp">
      <shape>
            <stroke android:width="2dp" android:color="@color/primary" />
			<solid android:color="@android:color/transparent"/>
      </shape>
    </item>
</layer-list>


SmartTabLayout
http://www.jcodecraeer.com/a/opensource/2015/0331/2674.html


http://blog.csdn.net/lmj623565791/article/details/42160391

Android TabLayout 库:FlycoTabLayout
http://www.open-open.com/lib/view/open1447294190257.html
  • 大小: 5.7 KB
分享到:
评论

相关推荐

    自定义HorizontalScrollView模仿RadioGroup+Fragment+Viewpager的翻页与点击效果,效果完全一样

    在Android开发中,有时我们需要实现一个可滑动切换的页面组件,这通常涉及到HorizontalScrollView、RadioGroup、Fragment以及ViewPager等控件。标题提到的“自定义HorizontalScrollView模仿RadioGroup+Fragment+...

    自定义HorizontalScrollView模仿RadioGroup+Fragment+ViewPager的翻页与点击效果,效果完全一样.161124更新

    这个"自定义HorizontalScrollView模仿RadioGroup+Fragment+ViewPager的翻页与点击效果"项目正是为了满足这样的需求。HorizontalScrollView是Android原生控件,用于在水平方向上滚动视图,而RadioGroup则可以实现单选...

    Android ViewPager联动HorizontalScrollView

    1、首先让导航栏横向滑动:HorizontalScrollView中放RadioGroup,RadioGroup中放RadioButton。 2、底部为ViewPager。 3、通过设置ViewPager的页面改变来设置RadioButton的模拟点击事件。 4、监听RadioButton点击,来...

    Android头部可滑动导航.zip

    本篇将详细介绍如何利用HorizontalScrollView、RadioGroup以及ViewPager这三种组件来实现这样一个功能丰富的头部滑动导航菜单。 首先,`HorizontalScrollView`是Android提供的一个水平滚动视图,它可以容纳一个或多...

    android菜单滑动

    总结,实现“android菜单滑动”需要结合RadioGroup、HorizontalScrollView或ViewPager等组件,通过监听滑动事件、添加滑动动画以及处理逻辑来实现。如果需要更高级的交互体验,可以考虑使用ViewPager和Fragment。在...

    ViewPage+Fragment界面滑动

    - `HorizontalScrollView`内部包含`RadioGroup`,用于存放所有的`RadioButton`,代表各个Tab选项。 - `ViewPager`用于显示对应的`Fragment`内容。 示例布局代码如下: ```xml android:layout_width="match_...

    android顶部滑动导航

    import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.support.v7.app....

    android配合viewpager实现可滑动的标签栏示例分享

    在`ViewPager`中,我们可以设置适配器(如`FragmentPagerAdapter`或`FragmentStatePagerAdapter`)来管理各个页面的创建和销毁。`ViewPager`的`OnPageChangeListener`接口可以监听页面的滑动事件,当页面改变时,...

    android开发demo集合

    1、LinearLayout Button、RadioGroup、 CheckBox 2、TableLayout 3、FrameLayout 霓虹灯效果 4、RelativeLayout 梅花效果 5、自定义view跟着触点走的小球 6、 ListView 列表视图 7、WebView web视图 8、...

    android初学者入门项目

    1、LinearLayout Button、RadioGroup、 CheckBox 2、TableLayout 3、FrameLayout 霓虹灯效果 4、RelativeLayout 梅花效果 5、自定义view跟着触点走的小球 6、 ListView 列表视图 7、WebView web视图 8、...

    android平台特色控件

    NestedScrollView是支持嵌套滚动的布局,它允许在单个视图内包含其他可滚动的视图,如ScrollView或HorizontalScrollView,特别适合在内容较多且需要滚动的场景。 10. **BottomNavigationView(底部导航栏)** ...

    Android高级应用源码-一个Demo搞定30个控件.zip

    3. **选择器控件**:Spinner(下拉列表)、RadioGroup(单选按钮组)、CheckBox(复选框)等,用于实现用户的多选项选择。 4. **滑动控件**:ScrollView(滚动视图)、HorizontalScrollView(水平滚动视图),可使...

    android_java_试卷答题app_代码实现

    可以使用`ViewPager`或者`HorizontalScrollView`来滑动浏览题目,每道题是一个独立的`Fragment`。 - 答题界面:每个题目下方有选项,用户可以点击选择答案,可以使用`RadioGroup`或`CheckBox`来实现多选或单选功能...

    android导航菜单集合

    7. **ZJ_HorizontalScrollView**:HorizontalScrollView是一个可以水平滚动的视图容器,可以容纳多个子视图。在导航菜单中,它通常用于创建横向滑动的选项卡布局,用户可以左右滑动查看不同内容。 8. **TabDemo**:...

    安卓开发-一个Demo搞定30个控件.zip

    26. HorizontalScrollView(水平滚动视图):同ScrollView,但支持水平方向的滚动。 27. ArrayAdapter(适配器):连接数据源和UI控件,如ListView或Spinner,用于数据绑定。 28. CursorAdapter(游标适配器):专门...

Global site tag (gtag.js) - Google Analytics