由于最近项目需求,需要用到购物类型界面设计,于是仿了淘宝做了一下。

还没学会做gif图,图片先凑合看吧。这是主界面。布局代码如下。

布局很简单,就不多说明,然后就是mainactivity的代码了
package com.taobao.pll.tborderdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;
public class MainActivity extends Activity {
private RelativeLayout rl_person_alllist;//全部订单
private RelativeLayout rl_person_wait_pay;//待支付
private RelativeLayout rl_person_send;//待发货
private RelativeLayout rl_person_wait_get;//待收货
private RelativeLayout rl_person_aftermarket;//售后
private Intent intent;//需要启动的界面
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initData() {
/**
* 全部订单
*/
rl_person_alllist.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent = new Intent(getApplicationContext(),OrderActivity.class);
intent.putExtra("page",0);
startActivity(intent);
}
});
/**
* 待支付
*/
rl_person_wait_pay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent = new Intent(getApplicationContext(),OrderActivity.class);
intent.putExtra("page",1);
startActivity(intent);
}
});
/**
* 待发货
*/
rl_person_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent = new Intent(getApplicationContext(),OrderActivity.class);
intent.putExtra("page",2);
startActivity(intent);
}
});
/**
* 待收货
*/
rl_person_wait_get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent = new Intent(getApplicationContext(),OrderActivity.class);
intent.putExtra("page",3);
startActivity(intent);
}
});
/**
* 售后
*/
rl_person_aftermarket.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent = new Intent(getApplicationContext(),OrderActivity.class);
intent.putExtra("page",4);
startActivity(intent);
}
});
}
private void initView() {
rl_person_alllist = (RelativeLayout) findViewById(R.id.rl_person_alllist);
rl_person_wait_pay = (RelativeLayout) findViewById(R.id.rl_person_wait_pay);
rl_person_send = (RelativeLayout) findViewById(R.id.rl_person_send);
rl_person_wait_get = (RelativeLayout) findViewById(R.id.rl_person_wait_get);
rl_person_aftermarket = (RelativeLayout) findViewById(R.id.rl_person_aftermarket);
}
}

这里需要说明就只有一点:intent.putExtra("page",0);因为每个点击都需要对应跳转页面的页卡选中哪个,所以需要传入一个page值

再来看OrderActivity的局部,这里稍微复杂那么一点点吧,使用的是radiogroup+viewpager,但是需要禁止左右滑动的,所以
我这里的viewpager是自定义的,先看布局,再看自定的viewpager吧。


package com.taobao.pll.tborderdemo.view;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* Created by pll on 2016/6/26.
*/
public class CustomViewPager extends ViewPager{
private boolean isCanScroll = false;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScanScroll(boolean isCanScroll){
this.isCanScroll = isCanScroll;
}
@Override
public void scrollTo(int x, int y){
// if (isCanScroll){
super.scrollTo(x, y);
// }
}
@Override
public void setCurrentItem(int item) {
// TODO Auto-generated method stub
super.setCurrentItem(item);
}
@Override
public boolean onTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
if (isCanScroll) {
return super.onTouchEvent(arg0);
} else {
return false;
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
if (isCanScroll) {
return super.onInterceptTouchEvent(arg0);
} else {
return false;
}
}
}

因为禁止左右滑动,viewpager也只是对 ontouchevent事件做了些处理,很简单,也就不解释了。
再来看OrderActivity.java代码
package com.taobao.pll.tborderdemo;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import com.taobao.pll.tborderdemo.adapter.FragmentAdapter;
import com.taobao.pll.tborderdemo.fragment.OrderGetFragment;
import com.taobao.pll.tborderdemo.fragment.OrderListFragment;
import com.taobao.pll.tborderdemo.fragment.OrderPayFragment;
import com.taobao.pll.tborderdemo.fragment.OrderSendFragment;
import com.taobao.pll.tborderdemo.fragment.OrderServiceFragment;
import com.taobao.pll.tborderdemo.view.CustomViewPager;
import java.util.ArrayList;
import java.util.List;
public class OrderActivity extends FragmentActivity {
private ListmFragmentList;//五个界面的集合
private FragmentAdapter mFragmentAdapter;//界面适配器
private CustomViewPager vp_order;//自定义viewpager
private int page;//得到选择的页码
private RadioGroup rg_order;//顶部页码
/**
* Tab显示内容TextView
*/
private RadioButton tv_order_all, tv_order_pay, tv_order_send, tv_order_get,tv_order_service;
//顶部导航栏的集合
private ArrayListtabList;
/**
* Tab的那个引导线
*/
private ImageView mTabLineIv;
/**
* Fragment
*/
private OrderListFragment mOrderListFragment;//全部订单
private OrderPayFragment mOrderPayFragment;//待支付
private OrderSendFragment mOderSendFragment;//待发货
private OrderGetFragment mOderGetFragment;//待收货
private OrderServiceFragment mOderServiceFragment;//售后服务
/**
* ViewPager的当前选中页
*/
private int currentIndex;
/**
* 屏幕的宽度
*/
private int screenWidth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order);
initView();
initData();
initTabLineWidth();
}
/**
* 设置滑动条的宽度为屏幕的1/5(根据Tab的个数而定)
*/
private void initTabLineWidth() {
DisplayMetrics dpMetrics = new DisplayMetrics();
getWindow().getWindowManager().getDefaultDisplay()
.getMetrics(dpMetrics);
screenWidth = dpMetrics.widthPixels;
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mTabLineIv
.getLayoutParams();
lp.width = screenWidth / 5;
mTabLineIv.setLayoutParams(lp);
}
private void initData() {
/**
* 进入时候根据page值设置导航栏选中哪个
*/
initDataForTopPage();
/**
* 加载引导页的数据
*/
mFragmentList = new ArrayList();
mOrderListFragment = new OrderListFragment();
mOrderPayFragment = new OrderPayFragment();
mOderSendFragment = new OrderSendFragment();
mOderGetFragment = new OrderGetFragment();
mOderServiceFragment = new OrderServiceFragment();
mFragmentList.add(mOrderListFragment);
mFragmentList.add(mOrderPayFragment);
mFragmentList.add(mOderSendFragment);
mFragmentList.add(mOderGetFragment);
mFragmentList.add(mOderServiceFragment);
mFragmentAdapter = new FragmentAdapter(this.getSupportFragmentManager(), mFragmentList);
vp_order.setAdapter(mFragmentAdapter);
vp_order.setCurrentItem(page);
vp_order.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mTabLineIv
.getLayoutParams();
/**
* 利用currentIndex(当前所在页面)和position(下一个页面)以及offset来
* 设置mTabLineIv的左边距 滑动场景:
* 记5个页面,
* 从左到右分别为0,1,2,3,4
* 0->1; 1->2; 2->3; 3->4; 4->3; 3->2;2->1; 1->0
*/
if (currentIndex == 0 && position == 0)// 0->1
{
lp.leftMargin = (int) (positionOffset * (screenWidth * 1.0 / 5) + currentIndex
* (screenWidth / 5));
} else if (currentIndex == 1 && position == 0) // 1->0
{
lp.leftMargin = (int) (-(1 - positionOffset)
* (screenWidth * 1.0 / 5) + currentIndex
* (screenWidth / 5));
} else if (currentIndex == 1 && position == 1) // 1->2
{
lp.leftMargin = (int) (positionOffset * (screenWidth * 1.0 / 5) + currentIndex
* (screenWidth / 5));
} else if (currentIndex == 2 && position == 1) // 2->1
{
lp.leftMargin = (int) (-(1 - positionOffset)
* (screenWidth * 1.0 / 5) + currentIndex
* (screenWidth / 5));
} else if (currentIndex == 2 && position == 2) // 2->3
{
lp.leftMargin = (int) (positionOffset * (screenWidth * 1.0 / 5) + currentIndex
* (screenWidth / 5));
} else if (currentIndex == 3 && position == 3) // 3->4
{
lp.leftMargin = (int) (positionOffset * (screenWidth * 1.0 / 5) + currentIndex
* (screenWidth / 5));
} else if (currentIndex == 3 && position == 2) // 3->2
{
lp.leftMargin = (int) (-(1 - positionOffset)
* (screenWidth * 1.0 / 5) + currentIndex
* (screenWidth / 5));
} else if (currentIndex == 4 && position == 3) // 4->3
{
lp.leftMargin = (int) (-(1 - positionOffset)
* (screenWidth * 1.0 / 5) + currentIndex
* (screenWidth / 5));
} else if (currentIndex == 4 && position == 4) // 4->3
{
lp.leftMargin = (int) (positionOffset * (screenWidth * 1.0 / 5) + currentIndex
* (screenWidth / 5));
}
mTabLineIv.setLayoutParams(lp);
}
/**
* position :当前页面,及你点击滑动的页面 offset:当前页面偏移的百分比
* offsetPixels:当前页面偏移的像素位置
*/
@Override
public void onPageSelected(int position) {
resetTextView();
switch (position) {
case 0:
tv_order_all.setTextColor(Color.BLUE);
break;
case 1:
tv_order_pay.setTextColor(Color.BLUE);
break;
case 2:
tv_order_send.setTextColor(Color.BLUE);
break;
case 3:
tv_order_get.setTextColor(Color.BLUE);
break;
case 4:
tv_order_service.setTextColor(Color.BLUE);
break;
}
currentIndex = position;
}
/**
* state滑动中的状态 有三种状态(0,1,2) 1:正在滑动 2:滑动完毕 0:什么都没做。
*/
@Override
public void onPageScrollStateChanged(int state) {
}
});
/**
* 顶部导航界面切换的监听
*/
rg_order.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
switch (checkedId) {
case R.id.tv_order_all:
vp_order.setCurrentItem(0);
break;
case R.id.tv_order_pay:
vp_order.setCurrentItem(1);
break;
case R.id.tv_order_send:
vp_order.setCurrentItem(2);
break;
case R.id.tv_order_get:
vp_order.setCurrentItem(3);
break;
case R.id.tv_order_service:
vp_order.setCurrentItem(4);
break;
}
}
});
}
private void initDataForTopPage() {
vp_order.setCurrentItem(0);
tabList = new ArrayList<>();
tabList.add(R.id.tv_order_all);
tabList.add(R.id.tv_order_pay);
tabList.add(R.id.tv_order_send);
tabList.add(R.id.tv_order_get);
tabList.add(R.id.tv_order_service);
rg_order.check(tabList.get(page));
resetTextView();
switch (page){
case 0:
tv_order_all.setTextColor(Color.BLUE);
break;
case 1:
tv_order_pay.setTextColor(Color.BLUE);
break;
case 2:
tv_order_send.setTextColor(Color.BLUE);
break;
case 3:
tv_order_get.setTextColor(Color.BLUE);
break;
case 4:
tv_order_service.setTextColor(Color.BLUE);
break;
}
currentIndex = page;
}
private void initView() {
vp_order = (CustomViewPager)findViewById(R.id.vp_order);
tv_order_all = (RadioButton)findViewById(R.id.tv_order_all);
tv_order_pay = (RadioButton)findViewById(R.id.tv_order_pay);
tv_order_send = (RadioButton)findViewById(R.id.tv_order_send);
tv_order_get = (RadioButton)findViewById(R.id.tv_order_get);
tv_order_service = (RadioButton)findViewById(R.id.tv_order_service);
mTabLineIv = (ImageView)findViewById(R.id.mTabLineIv);
rg_order = (RadioGroup)findViewById(R.id.rg_order);
page = getIntent().getIntExtra("page", -1);
}
/**
* 重置颜色
*/
private void resetTextView() {
tv_order_all.setTextColor(Color.parseColor("#777777"));
tv_order_pay.setTextColor(Color.parseColor("#777777"));
tv_order_send.setTextColor(Color.parseColor("#777777"));
tv_order_get.setTextColor(Color.parseColor("#777777"));
tv_order_service.setTextColor(Color.parseColor("#777777"));
}
}

这里用到的fragment界面布局很简单,就不粘贴出来了,需要说明的是Tab的引导线只根据viewpager和界面的宽度来设定的
代码注释已经详细说明,还有个需要注意的是,如果禁止了左右滑动,直接代码调用setCurrentItem(page)是不会调用
setOnPageChangeListener中的onPageSelected方法,所以需要在传入page值得时候,就手动把引导线和字体颜色进行改变。
就这些了,如有疑问可以给我发邮件,285501441@qq.com
github上还没去弄,demo的话先放网盘吧,需要自行下载http://pan.baidu.com/s/1skLodzv


仿淘宝订单管理界面设计相关推荐

  1. HTML5响应式手机模板:电商网站设计——仿淘宝手机app界面模板源码 HTML+CSS+JavaScript...

    HTML5响应式手机模板:电商网站设计--仿淘宝手机app界面模板源码 HTML+CSS+JavaScript 手机电商模板 手机网站模板 企业手机网站模板 手机网站模板 手机模板 响应式手机网站 h ...

  2. HTML5响应式手机模板:电商网站设计——仿淘宝手机app界面模板源码 HTML+CSS+JavaScript

    HTML5响应式手机模板:电商网站设计--仿淘宝手机app界面模板源码 HTML+CSS+JavaScript 手机电商模板 手机网站模板 企业手机网站模板 手机网站模板 手机模板 响应式手机网站 h ...

  3. HTML5期末大作业:仿淘宝电商网站设计——仿淘宝电商管理系统(21页)含论文 HTML+CSS+JavaScript 学生DW网页设计作业成品 大学生网页制作期末作业

    HTML5期末大作业:仿淘宝电商网站设计--仿淘宝电商管理系统(21页)含论文 HTML+CSS+JavaScript 学生DW网页设计作业成品 大学生网页制作期末作业 常见网页设计作业题材有 个人. ...

  4. 仿淘宝商品浏览界面, 向上拉查看详情

    最新项目中有展示类似淘宝商品详情的功能,主要实现  向上拉查看详情,百度一搜,发现有大神已经实现这个效果了 http://blog.csdn.net/zhongkejingwang/article/d ...

  5. html网页制作——仿淘宝电商管理系统(21页)含论文 HTML+CSS+JavaScript 学生DW网页设计作业成品 大学生网页制作期末作业C71

    HTML5期末大作业:仿淘宝电商网站设计--仿淘宝电商管理系统(21页)含论文 HTML+CSS+JavaScript 学生DW网页设计作业成品 大学生网页制作期末作业 常见网页设计作业题材有 个人. ...

  6. 订单系统开发(仿淘宝和美团网) 之 项目总结(降低数据库并发量)

    原文:订单系统开发(仿淘宝和美团网) 之 项目总结(降低数据库并发量) 继上一篇"订单系统开发(仿淘宝和美团网) 之 项目总结(一)",这篇博客重点想说下订单系统开发的设计和有待优 ...

  7. 安卓APP源码和设计报告——仿淘宝水果商城

    项目名称 仿淘宝水果商城 项目概述 随着互联网技术地高速发展,计算机进入到每一个人的生活里,从人们的生活方式到整个社会的运转都产生了巨大的变革,而在信息技术发达的今天,互联网的各种娱乐方式都在渗透到人 ...

  8. 学生dreamweaver网页设计作业成品:电商网页设计——仿淘宝静态首页(HTML+CSS)

    学生dreamweaver网页设计作业成品:电商网页设计--仿淘宝静态首页(HTML+CSS) 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求 ...

  9. HTML5期末大作业:电商网站设计——仿淘宝电商网站管理系统21页(含毕业设计论文7500字) HTML+CSS+JavaScript

    HTML5期末大作业:电商网站设计--仿淘宝电商网站管理系统21页(含毕业设计论文7500字) HTML+CSS+JavaScript 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. ...

最新文章

  1. mysql set 子表,mysql update set 更新表数据
  2. js防止表单重复提交
  3. iOS开发系列文章(持续更新……)
  4. 用 Python 实现一个大数据搜索引擎
  5. Magento 产品推荐 extension Featured products 2.0 – revamped!
  6. c语言用switch计算器,超级新手,用switch写了个计算器程序,求指导
  7. linux语言yhq,linux通过docker安装kafka
  8. QTP不识别树结构中的点击事件
  9. Unity 编辑器知识(—)如何绘制色块
  10. 如何短期通过2022年3月PMP考试?
  11. 电网调度计算机系统目前有三种,电力系统知识问答(三)
  12. php实现根据身份证获取年龄的函数
  13. JAVA TCP编程和UDP编程
  14. 菜鸟java基础--1
  15. 常用零部件尺寸公差标注方法
  16. python小玩意——敏感词汇检测
  17. hadoop原理巧用到异地机房双活
  18. win8右下角网络图标不见了_win8系统右下角的音量图标不见了的设置办法
  19. JSjavascript获取B站封面图片超高清批量下载原图
  20. Error: ErrorCodeERRPS008:SubStatusES0001:Error: Could not read installation path from registry.

热门文章

  1. Amazon S3 的 java sdk简单使用
  2. 《只要你有心,人人都是JVM精通者》总目录
  3. python算法(基础)---算法分析
  4. python柱状图、直方图和饼状图统计学生成绩
  5. 聚合AI工具内含chatGPT
  6. 中南大学计算机导师名单,中南大学信息学院导师一览表.pdf
  7. 计算机上无法共享文件夹,高手支招,能访问电脑,但不能访问其中得共享文件夹?...
  8. 中国有机快餐市场趋势报告、技术动态创新及市场预测
  9. 渗透测试之信息收集(超完整版)
  10. CCS编译报错 error #10234-D: unresolved symbols remain