Kos*_*rak 4 android listview onscrolllistener
嘿伙计们,我在我的应用程序中创建一个listView和一个浮动按钮,我希望隐藏和返回的效果取决于滚动状态.当ListView正在滚动时,按钮隐藏得很好,但是当滚动停止时,按钮不会返回到其初始位置.
有任何想法吗?
我的代码:
public class MainActivity extends ActionBarActivity {
private ImageButton btn;
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String[] items = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14", "item 15"};
lv = (ListView)findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, items);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "You have selected " + items[position].toString(), Toast.LENGTH_SHORT).show();
}
});
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState == SCROLL_STATE_TOUCH_SCROLL){
btn.animate().translationYBy(350);
}else{
btn.animate().cancel();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
btn = (ImageButton)findViewById(R.id.add_button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Floating Button Pressed", Toast.LENGTH_SHORT).show();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!!!
小智 10
这可以防止按钮在短线下发射:
public void onScrollStateChanged(AbsListView view, int scrollState) {
int btn_initPosY=btn.getScrollY();
if (scrollState == SCROLL_STATE_TOUCH_SCROLL) {
btn.animate().cancel();
btn.animate().translationYBy(150);
} else {
btn.animate().cancel();
btn.animate().translationY(btn_initPosY);
}
}
Run Code Online (Sandbox Code Playgroud)