当你想要展现自己的产品或者其它列表的时候,你可能觉得屏幕比较小,放的条目有限。于是可以向下滑动的时候把列表以上布局自动隐藏起来,类似淘宝客户端。向上滑动的时候标题自动弹下来。之前用动画实在发现有问题,listview的高度随着动画开始、结束这两个状态的值,后来改了下实现方法,用AsyncTask动态改变其topMargin,这样就完美实现了。
这里只上传自动伸展、收缩控件,那个listview的滑动大家自己写吧,监听当前位置就可以了,很简单的,只需调用一下doMove方法即可!
XML文件
MoveLayout .java文件
这里只上传自动伸展、收缩控件,那个listview的滑动大家自己写吧,监听当前位置就可以了,很简单的,只需调用一下doMove方法即可!

package com.lee.move.view;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import com.lee.move.view.MoveLayout;
public class MainActivity extends Activity implements OnClickListener {
protected MoveLayout layout;
protected Button change;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
layout = (MoveLayout) findViewById(R.id.zoom);
change = (Button) findViewById(R.id.change);
ListView list = (ListView) findViewById(R.id.list);
ArrayList arrayList = new ArrayList();
arrayList.add("aaa");
arrayList.add("bbb");
arrayList.add("ccc");
arrayList.add("ddd");
arrayList.add("eee");
arrayList.add("fff");
arrayList.add("ggg");
arrayList.add("hhh");
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, android.R.id.text1,
arrayList);
list.setAdapter(adapter);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v == change) {
layout.doMove();
}
}
}
XML文件
MoveLayout .java文件
import android.content.Context;
import android.os.AsyncTask;
import android.util.AttributeSet;
import android.widget.LinearLayout;
public class MoveLayout extends LinearLayout {
private final static int SPEED = 15;
private int MAX_VALUE = 0;
public MoveLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// TODO Auto-generated method stub
super.onLayout(changed, l, t, r, b);
MAX_VALUE = b - t;
}
public void doMove() {
LayoutParams lp = (LayoutParams) getLayoutParams();
if (lp.topMargin >= 0)
new AsynMove().execute(new Integer[] { -SPEED });
else if (lp.topMargin <= -lp.height)
new AsynMove().execute(new Integer[] { SPEED });
}
private class AsynMove extends AsyncTask {
@Override
protected Void doInBackground(Integer... params) {
// TODO Auto-generated method stub
int times = 0;
if (MAX_VALUE % Math.abs(params[0]) == 0)
times = MAX_VALUE / Math.abs(params[0]);
else
times = MAX_VALUE / Math.abs(params[0]) + 1;
try {
for (int i = 0; i < times; i++) {
publishProgress(params);
Thread.sleep(Math.abs(params[0]));
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
LayoutParams lp = (LayoutParams) getLayoutParams();
if (values[0] < 0)
lp.topMargin = Math.max(lp.topMargin + values[0], -MAX_VALUE);
else
lp.topMargin = Math.min(lp.topMargin + values[0], MAX_VALUE);
setLayoutParams(lp);
}
}
}
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2313
- 用户1336
- 访客11756491
每日一句
Life is short; Live it!
人生苦短,活出精彩。
人生苦短,活出精彩。
信鸽推送报错NSObject checkTargetOtherLinkFlagForObjc
简单利用Clover四叶草安装U盘安装黑苹果
学习使用Java注解
OllyDbg中如何找出B模块中所有调用了A模块的C方法的地方
解决SSH客户端中文乱码
10年后,Android应用程序仍然比iOS应用程序差
C++11特性里面的thread
XPosed微信自动生成二维码
解决android studio "found an invalid color"的问题
T9社区注册方法【勼适様鲃女尔懟死】
Thinkpad x1 Extreme黑苹果10.14.5安装完成
基于大白主题增加图片本地化的功能
Linux系统查看CPU使用率的几个命令
新会员