嘿伙计们,我在我的应用程序中创建了一个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();
}
});
}
}
提前致谢!!!
答案 0 :(得分: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);
}
}
答案 1 :(得分:6)
对于Android浮动操作按钮,它对滚动事件作出反应,您可以使用此链接:
答案 2 :(得分:4)
这将做你想要的事情
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState == SCROLL_STATE_TOUCH_SCROLL){
btn.animate().cancel();
btn.animate().translationYBy(350);
}else{
btn.animate().cancel();
btn.animate().translationYBy(-350);
}
}
@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();
}
});
答案 3 :(得分:2)
@Override
public void onScrollStateChanged(AbsListView view, int scrollState){
int btnPosY = buttonFab.getScrollY();
if (scrollState == SCROLL_STATE_TOUCH_SCROLL) {
buttonFab.animate().cancel();
buttonFab.animate().translationYBy(150);
} else if (scrollState == SCROLL_STATE_FLING) {
buttonFab.animate().cancel();
buttonFab.animate().translationYBy(150);
} else {
buttonFab.animate().cancel();
buttonFab.animate().translationY(btnPosY);
}
}