android listview 顶部加载,几种实现ListView顶部悬浮效果

顶部悬浮,这个是老生常谈的控件,一搜索网上大篇幅的介绍,有几种实现方式:

1.简单的实现ListView顶部悬浮http://blog.csdn.net/ljfbest/article/details/38765641java

效果图:

4b6670406120434a4a9308e8ebd820fa.png

这几种方式要实现的悬浮tab不都是透明的,而且是ListView或者ScrollView中一个单独的模块,好比是一个单独的header或item悬浮。

若是要实现header中的部分悬浮呢,效果又是怎样?web

效果图:

fc3fcfbbce74718a584eb136170409d7.png框架

要实现悬浮效果,与1介绍的方式相似,写2个tab,一个先隐藏在顶部,当list View中的tab滚动到隐藏的tab位置时,显示悬浮的tab。经过监听OnScrollListener事件,与1的区别在于1经过判断第一个条目irstVisibleItem >= 1来控制,悬浮tab的显示与隐藏,这里介绍的是经过view的位置与变化来判断悬浮tab的显示与隐藏。ide

主要代码:svg

@Override

public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

if (realTabView.getHeight() + headerTv.getHeight() > headerLayout.getBottom()) {

hideView.setVisibility(View.VISIBLE);

realtab.setVisibility(View.INVISIBLE);

} else {

hideView.setVisibility(View.INVISIBLE);

realtab.setVisibility(View.VISIBLE);

}

}

其中realTabVIew.getHeight()是上图中半透明tab的高度

headerTv.getHeight()是顶部白色的标题栏高度

headerLayout.getBottom()是背景图片底部到顶部边缘距离

也就是:

半透明tab的高度+标题栏高度>背景图片底部到顶部边缘距离 时,隐藏真实的tab,显示悬浮tab

9d14bf09357224a0972625c18ded4d80.pngthis

完整代码:spa

public class FloatListActivity extends Activity implements AbsListView.OnScrollListener {

private ArrayList listData;

private ListView listView;

private MyAdapter adapter;

private View headerPicView;

private View hideView;

private View headerTv;

private View realTab;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_float);

initView();

}

private void initView() {

headerPicView = LayoutInflater.from(this).inflate(R.layout.layout_header, null);

hideView = findViewById(R.id.secondLayout);

headerTv = findViewById(R.id.header_tv);

realTab = headerPicView.findViewById(R.id.inc_tab);

listData = new ArrayList<>(30);

for (int i = 0; i < 30; i++) {

listData.add("item" + i);

}

adapter = new MyAdapter();

listView = (ListView) findViewById(R.id.listView);

//按顺序添加1个view,先添加的在上面。

listView.addHeaderView(headerPicView);

listView.setAdapter(adapter);

//listView监听滑动事件,很重要,由于能够根据滑动的位置

//决定是否要加载隐藏的视图hideView

listView.setOnScrollListener(this);

}

@Override

public void onScrollStateChanged(AbsListView absListView, int scrollState) {

}

@Override

public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

if (hideView.getHeight() + headerTv.getHeight() > headerPicView.getBottom()) {

hideView.setVisibility(View.VISIBLE);

realTab.setVisibility(View.INVISIBLE);

headerTv.setBackgroundColor(getResources().getColor(android.R.color.white));

} else {

hideView.setVisibility(View.INVISIBLE);

realTab.setVisibility(View.VISIBLE);

headerTv.setBackgroundColor(getResources().getColor(android.R.color.transparent));

}

}

private class MyAdapter extends BaseAdapter {

@Override

public int getCount() {

return listData.size();

}

@Override

public String getItem(int i) {

return listData.get(i);

}

@Override

public long getItemId(int i) {

return i;

}

@Override

public View getView(int i, View view, ViewGroup viewGroup) {

ViewHolder viewHolder = null;

if (view == null) {

view = LayoutInflater.from(FloatListActivity.this).inflate(R.layout.layout_item, null);

viewHolder = new ViewHolder();

viewHolder.initView(view);

view.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) view.getTag();

}

String item = getItem(i);

if (item == null) {

return view;

}

viewHolder.updateView(item);

return view;

}

class ViewHolder {

TextView textView;

void initView(View view) {

textView = (TextView) view.findViewById(R.id.item_tv);

}

void updateView(String item) {

textView.setText(item);

}

}

}

}

完整demo实现及其CollapsingToolbarLayout+Toolbar实现下载地址:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值