这个效果现在很多软件都实现了,其实说穿了很简单的。就是一个动画,做的地道点的加一个手势拖拉效果。
我写的代码(未参考任何代码,不知道别人怎么实现的。):
import java.util.ArrayList;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.LinearInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.AbsoluteLayout;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class SlideRightActivity extends BaseActivity implements OnTouchListener,OnGestureListener{
private Context context;
private Button btn;
private LinearLayout left_panel,right_panel;
private boolean isShowing=false;
private final int duration=200;
//
private GestureDetector mGestureDetector;
// private ViewGroup container;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_slide_right);
context=this;
initViews();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
initValues();
}
@Override
protected void updateViews(Object o) {
// TODO Auto-generated method stub
}
@Override
protected void initViews() {
// TODO Auto-generated method stub
// container=(ViewGroup)findViewById(R.id.container);
left_panel=(LinearLayout)findViewById(R.id.left_panel);
left_panel.setLayoutParams(new AbsoluteLayout.LayoutParams((int)(getResources().getDisplayMetrics().widthPixels*0.8), AbsoluteLayout.LayoutParams.MATCH_PARENT, 0, 0));
right_panel=(LinearLayout)findViewById(R.id.right_panel);
right_panel.setOnTouchListener(this);
//定义手势识别
mGestureDetector = new GestureDetector(this,this);
mGestureDetector.setIsLongpressEnabled(false);
ArrayList<String> list=new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
ListView listView=(ListView)findViewById(R.id.listView);
ListViewAdapter adapter=new ListViewAdapter(list);
listView.setAdapter(adapter);
btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(onClickListener);
ArrayList<String> texts=new ArrayList<String>();
texts.add("111");
texts.add("222");
texts.add("333");
texts.add("444");
texts.add("555");
texts.add("666");
texts.add("777");
ListView listViewBeside=(ListView)findViewById(R.id.listViewBeside);
ListViewAdapter adapterBeside=new ListViewAdapter(texts);
listViewBeside.setAdapter(adapterBeside);
/**让ListView不拦截手势滑动*/
listViewBeside.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
doSlideWhenTouchUp(event);
mGestureDetector.onTouchEvent(event);
return false;
}
});
listViewBeside.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Log.i("tag", "position=="+position);
}
});
}
View.OnClickListener onClickListener=new View.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int width=left_panel.getMeasuredWidth();
if(isShowing){
doSlideCloseAnimation(right_panel,width);
}else{
doSlideOpenAnimation(right_panel,width);
}
}
};
@Override
protected void initValues() {
// TODO Auto-generated method stub
}
@Override
protected void initHandler() {
// TODO Auto-generated method stub