hyp*_*kcb 3 java animation android listview
我想实现类似向右滑动以显示 Android 开发中每个列表视图行上的按钮的功能。
我有一个完整的列表视图,可以动态获取和填充数据:
public class ProfilePastEvent extends Fragment{
View pastEventView;
Context context;
private ListView listview;
private ListAdapter mAdapter;
public ArrayList<Event> _eventlist = new ArrayList<Event>();
EventController eventCtrl = new EventController();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
listview = (ListView) pastEventView
.findViewById(R.id.pastEventListview);
mAdapter = new ListAdapter(getActivity());
listview.setAdapter(mAdapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View item,
int position, long id) {
});
return pastEventView;
}
private class ListAdapter extends BaseAdapter {
LayoutInflater inflater;
ViewHolder viewHolder;
public ListAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
public int getCount() {
return _eventlist.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(
R.layout.profile_past_listview_row, null);
viewHolder = new ViewHolder();
viewHolder.txt_dpastEventName = (TextView) convertView
.findViewById(R.id.txtPastEventName);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.txt_dpastEventName.setText(_eventlist.get(position)
.getEventName().trim());
return convertView;
}
}
private class ViewHolder {
TextView txt_dpastEventName;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,此列表视图的工作原理类似于用户单击特定行以打开新意图。我不确定如何实现向右滑动以显示“查看更多”或“删除”按钮功能。
有任何想法吗?提前致谢!
您可以使用这个库AndroidSwipeLayout。它具有以下类型的动画:
或者
如果您想自己编程,请添加以下类。我已经在其中一个示例应用程序中实现了这一点。我只在 stackoverflow 上找到了这个,但不记得是从哪里找到的。
public class MyGestureDetector extends SimpleOnGestureListener {
private ListView list;
public MyGestureDetector(ListView list) {
this.list = list;
}
//CONDITIONS ARE TYPICALLY VELOCITY OR DISTANCE
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (INSERT_CONDITIONS_HERE)
if (showDeleteButton(e1))
return true;
return super.onFling(e1, e2, velocityX, velocityY);
}
private boolean showDeleteButton(MotionEvent e1) {
int pos = list.pointToPosition((int)e1.getX(), (int)e1.getY());
return showDeleteButton(pos);
}
private boolean showDeleteButton(int pos) {
View child = list.getChildAt(pos);
if (child != null){
Button delete = (Button) child.findViewById(R.id.delete_button_id);
if (delete != null)
if (delete.getVisibility() == View.INVISIBLE)
delete.setVisibility(View.VISIBLE);
else
delete.setVisibility(View.INVISIBLE);
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
并按如下方式调用此类:
MyGestureDetector(YOUR_LIST);
Run Code Online (Sandbox Code Playgroud)
编辑:
要检测滑动,请使用以下条件:
private static final int SWIPE_MIN_DISTANCE = 80;
private static final int SWIPE_THRESHOLD_VELOCITY = 50;
private static final int PEOPLE_FRAGMENT = 0;
private static final int PLACES_FRAGMENT = 2;
Run Code Online (Sandbox Code Playgroud)
向上,向下,向右和向左滑动的条件是:(在您的情况下,只需要一个,向右或向左)。
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY){
Log.d("SWIPE", "right to left");
return true; //Right to left
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY){
Log.d("SWIPE", "left to right");
return true; //Left to right
}
//This will test for up and down movement.
if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY){
return false; //Bottom to top
} else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY){
return false; //Top to bottom
}
Run Code Online (Sandbox Code Playgroud)
现在showDeleteButton()在从右到左或从左到右添加。还要注意,您还可以通过更改final上面给出的变量值来检测小滑动。
希望能帮到你 :)
| 归档时间: |
|
| 查看次数: |
2711 次 |
| 最近记录: |