ListView悬浮框效果及 动态tab效果


效果图一:

效果图二:
原理:(1)ListView外面套一层相对布局,隐藏一个标题
(2)监听ScrollView的滚动

Demo地址:http://download.csdn.net/download/baopengjian/10000169
关键代码:
效果一:
private ListView lv;
private View ll_hide,mHeadView,ll_title;

private int[] mHideLocation = new int[2];
private int[] mTitleLocation = new int[2];

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

lv = (ListView) findViewById(R.id.lv);
ll_hide = findViewById(R.id.ll_hide);

mHeadView = View.inflate(this,R.layout.lv_head,null);
ll_title = mHeadView.findViewById(R.id.ll_title);
lv.addHeaderView(mHeadView);

String[] array = new String[100];
for(int i = 0;i<array.length;i++){
Random random = new Random();
array[i] = String.valueOf(random.nextInt(i+1));
}
lv.setAdapter(new ArrayAdapter<String>(Demo1Activity.this,android.R.layout.simple_list_item_1,array));
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {

}

@Override
public void onScroll(AbsListView absListView, int i, int i1, int i2) {
ll_hide.getLocationOnScreen(mHideLocation);
ll_title.getLocationOnScreen(mTitleLocation);
//比较y方向坐标
if(mTitleLocation[1]<mHideLocation[1]){
ll_hide.setVisibility(View.VISIBLE);
}else {
ll_hide.setVisibility(View.GONE);
}
}
});
}

效果二:
private ListView lv;
private View mHeadView,ll_title;

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

lv = (ListView) findViewById(R.id.lv);
mHeadView = View.inflate(this,R.layout.lv_head2,null);
ll_title = findViewById(R.id.ll_title);
lv.addHeaderView(mHeadView);

final List<NewStockCalendar> list = DataSupport.getDatas();
Adapter2 adapter = new Adapter2(this,list);
lv.setAdapter(adapter);
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {

}

@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(firstVisibleItem>0){
ll_title.setVisibility(View.VISIBLE);
((TextView)ll_title.findViewById(R.id.tv_date)).setText(list.get(firstVisibleItem).getSgsx());
}else{
ll_title.setVisibility(View.GONE);
}
}
});
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值