仿饿了么点餐页面吗点餐界面两个ListView联动效果

android中仿&饿了么&listview与stickylistheaderslistview联动 - CSDN博客
android中仿&饿了么&listview与stickylistheaderslistview联动
这里主要是以项目为例:(代码注释写的很清楚):GoodsFragment.java
public class GoodsFragment extends BaseFragment implements AdapterView.OnItemClickListener, AbsListView.OnScrollListener {
@InjectView(R.id.slh)
StickyListHeadersListView mS
@InjectView(R.id.lv)
ListView mLv;
private MyGroupAdapter groupA
private MyHeadAdapter headA
private List&Data& dataList = new ArrayList&&();
class Data {
int headId;
private List&Head& headList = new ArrayList&&();
class Head {
int groupFirstI
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_goods, null);
ButterKnife.inject(this, view);
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
testData();
headAdapter = new MyHeadAdapter();
mLv.setAdapter(headAdapter);
groupAdapter = new MyGroupAdapter();
mSlh.setAdapter(groupAdapter);
mLv.setOnItemClickListener(this);
mSlh.setOnScrollListener(this);
private boolean isScroll = false;
* 右边滚动的事件
public void onScrollStateChanged(AbsListView view, int scrollState) {
isScroll = true;
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (isScroll) {
Data data = dataList.get(firstVisibleItem);
headAdapter.setSelectedPosition(data.headIndex);
int firstVisiblePosition = mLv.getFirstVisiblePosition();
int lastVisiblePosition = mLv.getLastVisiblePosition();
if (data.headIndex &= firstVisiblePosition || data.headIndex&=lastVisiblePosition){
mLv.setSelection(data.headIndex);
* 左边条目的点击事件
public void onItemClick(AdapterView&?& parent, View view, int position, long id) {
Log.i("GoodsFragemnt","左边条目被点击了");
headAdapter.setSelectedPosition(position);
Head head = headList.get(position);
mSlh.setSelection(head.groupFirstIndex);
isScroll = false;
private void testData() {
for (int i = 0; i & 10; i++) {
Head head = new Head();
= "头数据:" +
headList.add(head);
for (int j = 0; j & headList.size(); j++) {
Head head = headList.get(j);
for (int i = 0; i & 10; i++) {
Data data = new Data();
data.headId =
data.headIndex =
= "普通条目数据:第" + j + "组,条目数:" +
if (i == 0) {
head.groupFirstIndex = dataList.size();
dataList.add(data);
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
* 右边条目的adapter
private class MyGroupAdapter extends BaseAdapter implements StickyListHeadersAdapter {
public View getHeaderView(int position, View convertView, ViewGroup parent) {
Data data = dataList.get(position);
Head head = headList.get(data.headIndex);
TextView tv = new TextView(MyApplication.getContext());
tv.setBackgroundColor(Color.GRAY);
public long getHeaderId(int position) {
int headId = dataList.get(position).headId;
return headId;
public int getCount() {
return dataList.size();
public Object getItem(int position) {
return dataList.get(position);
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(MyApplication.getContext());
tv.setText(dataList.get(position).info);
tv.setTextColor(Color.GRAY);
* 左边条目的adapter
private class MyHeadAdapter extends BaseAdapter {
private int mSelectedP
public int getCount() {
return headList.size();
public Object getItem(int position) {
return headList.get(position);
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(MyApplication.getContext());
tv.setText(headList.get(position).info);
tv.setLayoutParams(new ListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 80));
tv.setGravity(Gravity.CENTER);
tv.setTextSize(16);
tv.setTextColor(Color.BLACK);
if (position == mSelectedPosition) {
tv.setBackgroundColor(Color.WHITE);
tv.setBackgroundColor(Color.GRAY);
* 左边条目的选择
public void setSelectedPosition(int selectedPosition) {
if (mSelectedPosition == selectedPosition){
mSelectedPosition = selectedP
notifyDataSetChanged();
布局文件:fragment_goods.xml
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="@+id/lv"
android:layout_width="100dp"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:scrollbars="none"
android:id="@+id/slh"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"&
例外使用stickylistheaders之前需要导入依赖
compile 'se.emilsjolander:stickylistheaders:2.7.0'
具体的stickylistheaders使用可自行百度
本文已收录于以下专栏:
相关文章推荐
这是timehop的GitHub上发表的一个控件框架,大家可以去参考它的【GitHub】。
这里先贴出GitHub上提供的效果图:
要使用这个框架,我们需要...
仿饿了么,百度外卖这些App的双列表联动效果
1.自定义一个悬浮条目且带移动替换效果的ListView。
2.在界面中左边是个普通的ListV...
一些Android机自带“联系人列表”的功能中,联系人数据可以自动分组,且在列表滑动过程中,列表组信息header固定在顶部........
先上图 布局文件
跟饿了么移动版的订餐一样,listview上拉向上滑,分类什么的刚好停在最顶部,可以实现上拉加载更多,下拉刷新。求源代码或方法,谢谢!...
Android开源框架Sticky-List-Headers源码解析
有些同学可能没用过这个SckyListHeadersListView 先发个效果图,图片是从别的地方拷贝过来的
以下的几个类 直接拷贝到项目中 备用。
import java.lang.refl...
1。使用添加依赖lib
2。MainActivitypackage com.louisgeek.louisrecyclervimport android.o...
android 二级菜单、双ListView 仿美团、购物App二级菜单
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)发送私信成功
DevStore用户登录
还没有DevStore帐号?
快捷登录:
您目前的活力值不够下载该资源哦~~
怎么样快速获得活力值?
下载此资源将扣除活力值-20
(只在首次下载扣除活力值,之后可以免费下载)
满足所有需求,助您轻松工作
> 源码详情
仿饿了么+点餐动画效果
11:30 && 浏览量(10456) &&
功能分类:生活
支持平台:Android
运行环境:Eclipse
开发语言:Java
开发工具:Eclipse
源码大小:4.97MB
1566 人下载
高仿饿了么安卓客户端,有相关方面需求的同学可以参考参考,不喜勿喷。。。
DevStore所有源码来自用户上传分享,版权问题及牵扯到商业纠纷均与DevStore无关。
package com.example.ele_me.
import android.annotation.TargetA
import android.app.A
import android.content.I
import android.os.B
import android.os.B
import android.support.v4.widget.SlidingPaneL
import android.view.V
import android.view.W
import android.view.View.OnClickL
import android.widget.AdapterV
import android.widget.ImageV
import android.widget.LinearL
import android.widget.TextV
import android.widget.T
import com.example.ele_me.R;
import com.example.ele_me.adapter.RestaurantDetailA
import com.example.ele_me.util.InjectV
import com.example.ele_me.util.I
import com.example.ele_me.widget.stickylistheaders.StickyListHeadersListV
public class RestaurantDetailActivity extends Activity implements
AdapterView.OnItemClickListener,
StickyListHeadersListView.OnHeaderClickListener,
StickyListHeadersListView.OnStickyHeaderOffsetChangedListener,
StickyListHeadersListView.OnStickyHeaderChangedListener {
private RestaurantDetailAdapter mA
private boolean fadeHeader =
@InjectView(R.id.linear_above_toHome)
private LinearLayout above_toH
@InjectView(R.id.tv_common_above_head)
private TextView above_
@InjectView(R.id.iv_head_left)
private ImageView head_
@InjectView(R.id.tv_common_above_head)
private TextView head_
@InjectView(R.id.food_list_shipping_fee)
private TextView order_
private String restaurant_
private StickyListHeadersListView stickyL
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.restaurant_detail_main);
Injector.get(this).inject();//init views
Intent intent = getIntent();
restaurant_name = intent.getStringExtra("name");
initView();
setListener();
private void initView() {
above_tittle.setText(restaurant_name);
head_left.setImageResource(R.drawable.abc_ic_ab_back_holo_dark);
private void setListener() {
// TODO Auto-generated method stub
above_toHome.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mAdapter = new RestaurantDetailAdapter(this,order_cart);
stickyList = (StickyListHeadersListView) findViewById(R.id.list_restaurant_detail);
stickyList.setOnItemClickListener(this);
stickyList.setOnHeaderClickListener(this);
stickyList.setOnStickyHeaderChangedListener(this);
stickyList.setOnStickyHeaderOffsetChangedListener(this);
stickyList.addHeaderView(getLayoutInflater().inflate(
R.layout.restaurant_list_header, null));
stickyList.addFooterView(getLayoutInflater().inflate(
R.layout.restaurant_list_footer, null));
stickyList.setDrawingListUnderStickyHeader(true);
stickyList.setAreHeadersSticky(true);
stickyList.setAdapter(mAdapter);
stickyList.setStickyHeaderTopOffset(-20);
public void onItemClick(AdapterView parent, View view, int position,
long id) {
Toast.makeText(this, "Item " + position + " clicked!",
Toast.LENGTH_SHORT).show();
public void onHeaderClick(StickyListHeadersListView l, View header,
int itemPosition, long headerId, boolean currentlySticky) {
Toast.makeText(this,
"Header " + headerId + " currentlySticky ? " + currentlySticky,
Toast.LENGTH_SHORT).show();
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onStickyHeaderOffsetChanged(StickyListHeadersListView l,
View header, int offset) {
if (fadeHeader
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
header.setAlpha(1 - (offset / (float) header.getMeasuredHeight()));
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onStickyHeaderChanged(StickyListHeadersListView l, View header,
int itemPosition, long headerId) {
header.setAlpha(1);
下载(1566)
获取活力值
源码上传作者
资料下载排行
开发者交流群:
DevStore技术交流群2:
运营交流群:
产品交流群:
深圳尺子科技有限公司
深圳市南山区蛇口网谷万海大厦C栋504
Copyright (C) 2015 DevStore. All Rights Reserved仿美团外卖,饿了吗
两个ListView联动,左边点击切换右边,右边滑动切换左边 - CSDN博客
仿美团外卖,饿了吗
两个ListView联动,左边点击切换右边,右边滑动切换左边
先上效果图:
1.先说右边标题:
首先,右边的数据源集合中的Javabean中含有三个属性name,type,title,而每个条目中会默认含有一个标题.
如果这是第一个条目,就让标题显示出来,再如果这个条目的类型和上一个条目的类型不一样,就让这个条目的标题显示出来,否则,就隐藏标题,& 这样我们就做到了每种类型只有第一个数据标题显示出来
接着,在Listview的外层(也就是MainActivity的布局文件中),默认放一个标题(下面都称作是主标题)
最后,设置右边Listview的滚动监听事件&&& 在onScroll方法中,我们要做两件事:
&&&& 第一件事是每当前第一个可见条目的类型和当前左边Listview选择的类型(红色字体的类型) 不一样时,需要将主标题的内容改变
&&&& 第二件事&
同时切换左边Listview的选中状态
2.再说左边的Listview
左边的Listview需要设置条目点击事件,在点击事件中需要干三件事:
第一& 将左边点击条目的字体颜色改变
第二&& 将右边Listview滚动至左边Listview所选择类型相同的区域
第三& 改变主标题的内容
说到这,大家可能还是云里雾里的,还是不知道左边的类型和右边的类型是怎么关联起来的?没关系,在下面的代码解析中你就会明白!下边是具体的实现步骤:
1.在MainActivity的布局文件中&&& 添加应有的控件
&span style=&font-size:14&&&LinearLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&horizontal&
tools:context=&.MainActivity& &
android:id=&@+id/lv_left&
android:layout_width=&0dp&
android:layout_height=&match_parent&
android:layout_weight=&1& &
&/ListView&
&RelativeLayout
android:layout_width=&0dp&
android:layout_height=&match_parent&
android:layout_weight=&3& &
android:id=&@+id/lv_Right&
android:layout_width=&match_parent&
android:layout_height=&match_parent& &
&/ListView&
android:id=&@+id/tv_title&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:background=&#9f9f9f&
android:gravity=&center&
android:padding=&5dp&
android:textColor=&#000000&
android:textSize=&18sp& /&
&/RelativeLayout&
&/LinearLayout&&/span&
注意&& 这里边将Listview和主标题textView放在一个相对布局中,并且先放Listview,后放textView,目的是将主标题放在Listview的空间的上方
2.左边Listview的Item布局文件
&span style=&font-size:14&&&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&50dp&
android:background=&#f9f9f9&
android:gravity=&center&
android:orientation=&vertical& &
android:id=&@+id/tv_left&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&左边条目&
android:textColor=&#000000&
android:textSize=&18sp& /&
&/LinearLayout&&/span&
&span style=&font-size:18&&3.右边Listview的Item布局文件&/span&
&span style=&font-size:14&&&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:background=&#f9f9f9&
android:gravity=&center&
android:orientation=&vertical& &
android:id=&@+id/tv_right&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:background=&#9f9f9f&
android:gravity=&center&
android:padding=&5dp&
android:text=&右边条目&
android:textColor=&#000000&
android:textSize=&18sp& /&
&LinearLayout
android:layout_width=&match_parent&
android:layout_height=&90dp&
android:gravity=&center_vertical&
android:orientation=&horizontal& &
&ImageView
android:layout_width=&80dp&
android:layout_height=&80dp&
android:background=&@drawable/jipai& /&
android:id=&@+id/tv_content&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_marginLeft=&50dp&
android:text=&左边条目&
android:textColor=&#000000&
android:textSize=&18sp& /&
&/LinearLayout&
&/LinearLayout&&/span&
二.创建Javabean
&span style=&font-size:14&&public class BaseData {
// 类型 后边要根据类型显示标题
private S//
public BaseData(String name, int type, String title) {
this.name =
this.type =
this.title =
public BaseData() {
public String getTitle() {
public void setTitle(String title) {
this.title =
public String getName() {
public void setName(String name) {
this.name =
public int getType() {
public void setType(int type) {
this.type =
三.创建两个adapter
1.左边Listview的adapter
&span style=&font-size:14&&/**
* 左边的adapter
注意要给textview设置tag
* @author HaiPeng
public class LeftAdapter extends BaseAdapter {
String data[]={&蔬菜1&,&水果1&,&姓氏1&,&蔬菜2&,&水果2&,&姓氏2&,&蔬菜3&,&水果3&,&姓氏3&};
public LeftAdapter(Context context) {
this.context =
public int getCount() {
return data.
public Object getItem(int position) {
public long getItemId(int position) {
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHold vh =
if (convertView == null) {
convertView = View.inflate(context, R.layout.item_left, null);
vh = new ViewHold();
convertView.setTag(vh);
vh.tv_left = (TextView) convertView.findViewById(R.id.tv_left);
vh = (ViewHold) convertView.getTag();
vh.tv_left.setTag(position);
vh.tv_left.setText(data[position]);
return convertV
public class ViewHold {
TextView tv_
2.右边Listview的adapter
&span style=&font-size:14&&/**
* 右边listview的adapter
* @author HaiPeng
public class RightAdapter extends BaseAdapter {
private ArrayList&BaseData& data = new ArrayList&BaseData&();
public RightAdapter(Context context) {
this.context =
* 这个方法是用来更新数据源
* @param context
public void updateData(ArrayList&BaseData& lists) {
data.clear();
data.addAll(lists);
this.notifyDataSetChanged();
public int getCount() {
// TODO Auto-generated method stub
return data.size();
public Object getItem(int position) {
public long getItemId(int position) {
// TODO Auto-generated method stub
public View getView(int position, View convertView, ViewGroup parent) {
ViewHold vh =
if (convertView == null) {
convertView = View.inflate(context, R.layout.item_right, null);
vh = new ViewHold();
convertView.setTag(vh);
vh.tv_content = (TextView) convertView
.findViewById(R.id.tv_content);
vh.tv_right = (TextView) convertView.findViewById(R.id.tv_right);
vh = (ViewHold) convertView.getTag();
vh.tv_content.setText(data.get(position).getName());
if (position == 0) {//如果是第一个
需要显示标题
vh.tv_right.setVisibility(View.VISIBLE);
vh.tv_right.setText(data.get(position).getTitle());
} else if (!TextUtils.equals(data.get(position).getTitle(),
data.get(position - 1).getTitle())) {//如果这个标题和上一个不一样
也需要将标题显示出来
vh.tv_right.setVisibility(View.VISIBLE);
vh.tv_right.setText(data.get(position).getTitle());
vh.tv_right.setVisibility(View.GONE);
return convertV
public class ViewHold {
TextView tv_
TextView tv_
四.MainActivity中操作
1.初始化数据
&span style=&font-size:14&&private void initData() {
lists = new ArrayList&BaseData&();
String title[] = { &蔬菜1&, &水果1&, &姓氏1&, &蔬菜2&, &水果2&, &姓氏2&, &蔬菜3&,
&水果3&, &姓氏3& };
String name1[] = { &萝卜&, &大葱&, &茄子&, &大蒜&, &生姜&, &萝卜&, &大葱&, &茄子&,
&大蒜&, &生姜&, &萝卜&, &大葱& };
String name2[] = { &苹果&, &梨&, &香蕉&, &西瓜&, &橘子&, &大枣&, &菠萝&, &红提&, &葡萄&,
&樱桃&, &椰子& };
String name3[] = { &郑&, &王&, &伊&, &荆&, &汤&, &王&, &孙&, &李&, &钱&, &赵&,
&祁&, &韦&, &宏& };
for (int i = 0; i & name1. i++) {
lists.add(new BaseData(name1[i] + 1, i, title[0]));
for (int i = 0; i & name2. i++) {
lists.add(new BaseData(name2[i] + 1, i, title[1]));
for (int i = 0; i & name3. i++) {
lists.add(new BaseData(name3[i] + 1, i, title[2]));
for (int i = 0; i & name1. i++) {
lists.add(new BaseData(name1[i] + 2, i, title[3]));
for (int i = 0; i & name2. i++) {
lists.add(new BaseData(name2[i] + 2, i, title[4]));
for (int i = 0; i & name3. i++) {
lists.add(new BaseData(name3[i] + 2, i, title[5]));
for (int i = 0; i & name1. i++) {
lists.add(new BaseData(name1[i] + 3, i, title[6]));
for (int i = 0; i & name2. i++) {
lists.add(new BaseData(name2[i] + 3, i, title[7]));
for (int i = 0; i & name3. i++) {
lists.add(new BaseData(name3[i] + 3, i, title[8]));
//假数据创建的方式比较low,大家不喜勿喷
//看下边这个集合,这个集合是右边所有要显示标题的条目的position
ArrayList&String&
showTitle = new ArrayList&String&();
for (int i = 0; i & lists.size(); i++) {
if (i == 0) {//第一个必须显示
showTitle.add(i + &&);
} else if (!TextUtils.equals(lists.get(i).getTitle(),
lists.get(i - 1).getTitle())) {//如果跟上一个条目的type不一样就必须显示
showTitle.add(i + &&);
//这个集合也就是就是左边和右边类型联系的桥梁&/span&
2.初始化布局,我用的xutils的注解
&span style=&font-size:14&& @ViewInject(R.id.lv_left)
private ListView lv_
@ViewInject(R.id.lv_Right)
private ListView lv_R
@ViewInject(R.id.tv_title)
private TextView tv_
//但不要忘记在onCreate方法ViewUtils.inject(this);
leftAdapter = new LeftAdapter(context);
lv_left.setAdapter(leftAdapter);
rightAdapter = new RightAdapter(context);
lv_Right.setAdapter(rightAdapter);
rightAdapter.updateData(lists);// 将数据源传递给Listview
tv_title.setText(lists.get(0).getTitle());// 主标题栏设置默认初始值&/span&
3.先看右边的Listview的滚动监听事件
&span style=&font-size:14&&lv_Right.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
int currentPosition = showTitle.indexOf(firstVisibleItem + &&);//当前选中的一级条目的position
//firstVisibleItem是右边Listview当前第一个可见条目的position
根据//showTitle.indexOf(firstVisibleItem + &&)可以得到这个数字在showTitle集合中的排序(是第几个),而这个排序刚好就是
//左边Listview当前所选中的条目的position 这样我们就能根据左边的类型判断右边的类型了
updateLeftListview(firstVisibleItem, currentPosition);//这个方法下面会说
是一个抽出来的方法
左边//Listview的点击事件也会用到
public void onScrollStateChanged(AbsListView view, int scrollState) {
});&/span&
4.左边Listview的点击事件
&span style=&font-size:14&&lv_left.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView&?& arg0, View arg1, int arg2,
long arg3) {
int firstVisibleItem = lv_Right.getFirstVisiblePosition();
//右边Listview当前第一个可见条目的position
updateLeftListview(firstVisibleItem, arg2);
lv_Right.setSelection(Integer.parseInt(showTitle.get(arg2)));
//arg2是点击(选择)左边条目的第几个
//根据这个数字我们就能通过Integer.parseInt(showTitle.get(arg2))得到在点击左边后应该跳转到右边第几个条目
通过etSelection方法跳转
});&/span&
5.updateLeftListview方法
&span style=&font-size:14&&
* 更新左边Listview字体颜色
并且更改主标题的内容
* @param firstVisibleItem
右边当前第一个可见的条目position
* @param currentPosition
左边listview当前被点击或者要显示为红色的条目position
private void updateLeftListview(int firstVisibleItem, int currentPosition) {
if (showTitle.contains(firstVisibleItem + &&)) {//右边的Listview滑动到这firstVisibleItem这个条目时
// 而showTitle中包含firstVisibleItem
那么这个时候我们就需要将主标题的内容修改和firstVisibleItem的标题一样
// 并且左边Listview需要更改颜色的条目(点击需要更改或者右边滑动应该改变的textView)的字体颜色改变掉
 tv_title.setText(lists.get(firstVisibleItem).getTitle());//将主标题的内容修改和firstVisibleItem的标题一样
TextView lasTextView = (TextView) lv_left
.findViewWithTag(lastPosition);
if (lasTextView != null) {//在右边Listview第一次加载过程中会一直调用监听中的onscroll
这时的textView可能为空
lasTextView.setTextColor(Color.BLACK);//先将上一个textView字体的颜色改成黑色
TextView currenTextView = (TextView) lv_left
.findViewWithTag(currentPosition);
if (currenTextView != null) {//再将当前要改变的extView字体的颜色改成红色
currenTextView.setTextColor(Color.RED);
lastPosition = currentP
到这大家应该大概明白左边点击切换右边,右边滑动切换左边是怎么实现的了吧
& http://download.csdn.net/detail/jeff169/9520261
本文已收录于以下专栏:
相关文章推荐
左右两个listview联动,无非是左边的listView设置条目点击事件,点击之后,先改变左边条目点击后的状态,再改变右边适配器的数据源
1.在MainActivity中布局文...
联动listview
本文主要实现了两个listview联动的效果,类似于美团点菜和城市选择效果,区别于网上很多的不同是右边的listview滑动时左边的listview也会跟着一起滑动。在布局的...
在日常的App开发中,尤其是在开发生活服务的应用上,很多时候,我们会需要联动地展现省市区的数据等,需求大概如下:
1)展现所有省份
2)当点击某省份的时候,在二级菜单上展现此省份下面所属的城市列表
Android高仿美团外卖点菜联动列表效果最近项目中有一个添加购物车的需求,需要做成美团外卖点菜联动ListView的效果,可能有的朋友觉得这很简单,不就是2个Listview点击事件联动处理机制吗?...
最近做项目时想把店铺内菜单展示做成百度外卖、美团外卖和淘点点的样子,网上没找到完美的Demo,所以只能自己瞎搞了;从Libraries
for developers上找了个PinnedHeaderL...
android 实现仿美团点菜和京东分类导航
欢迎大家进群:
开启我们的开发之旅
废话不多说,看图说话
当看到标题的时候,每个人都想知道,到底是个什么样子呢?会...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 仿美团点餐悬停界面 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信