首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

多个listview进展滑动切换效果

2012-12-26 
多个listview进行滑动切换效果import android.app.Activityimport android.app.AlertDialogimport andro

多个listview进行滑动切换效果
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.GestureDetector;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.GestureDetector.OnGestureListener;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ViewFlipper;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TableLayout.LayoutParams;

public class MainActivity extends Activity {

private ViewFlipper mVf;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mVf = new ViewFlipper(this);
        mVf.setLongClickable(true);
        mVf.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return mVfDetector.onTouchEvent(event);
}
});
       
        TextView tv = new TextView(this);
        tv.setText("TextView 1");
        tv.setBackgroundColor(0xffffffff);
        mVf.addView(tv,new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        TextView tv1 = new TextView(this);
        tv1.setText("TextView 2");
        tv1.setBackgroundColor(0xffffffff);
        mVf.addView(tv1,new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        ListView lv = new GestureListView(this);
        lv.setBackgroundColor(0xff808080);
        final String[] items = {"one", "two", "three", "four", "five", "six", "sevent", "eight", "nine"};
        lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
        lv.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return mVfDetector.onTouchEvent(event);
}
});
        lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
new AlertDialog.Builder(MainActivity.this).setMessage(items[arg2]).create().show();
}
});
        registerForContextMenu(lv);
        mVf.addView(lv,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        ListView lv1 = new GestureListView(this);
        lv.setBackgroundColor(0xff808040);
        final String[] items1 = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
        lv1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items1));
        lv1.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return mVfDetector.onTouchEvent(event);
}
});
        lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
new AlertDialog.Builder(MainActivity.this).setMessage(items[arg2]).create().show();
}
});
        registerForContextMenu(lv1);
        mVf.addView(lv1,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        setContentView(mVf);
    }
   
   
       
private GestureDetector mVfDetector = new GestureDetector(new OnGestureListener() {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//left
Log.i("GestureDemo", "ViewFlipper left");
mVf.showNext();
return true;
}else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//right
Log.i("GestureDemo", "ViewFlipper right");
mVf.showPrevious();
return true;
}
return false;
}
   
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}

@Override
public void onShowPress(MotionEvent e) {

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

return false;
}

@Override
public void onLongPress(MotionEvent e) {

}

@Override
public boolean onDown(MotionEvent e) {
return false;
}
});  

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    menu.add("Menu 1");
    menu.add("Menu 2");
    menu.add("Menu 3");
super.onCreateContextMenu(menu, v, menuInfo);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
System.out.println("View " + info.position + " context menu activited.");
return super.onContextItemSelected(item);
    }

class GestureListView extends ListView {

public GestureListView(Context context) {
super(context);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
if(mLvDetector.onTouchEvent(ev)) return true;
return super.onTouchEvent(ev);
}

private GestureDetector mLvDetector = new GestureDetector(new OnGestureListener() {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

@Override
public boolean onDown(MotionEvent e) {
int position = pointToPosition((int)e.getX(), (int)e.getY());
if( position != ListView.INVALID_POSITION) {
View child = getChildAt(position - getFirstVisiblePosition());
if(child != null) child.setPressed(true);
}
return true;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//left
Log.i("GestureDemo", "ListView left");
mVf.showNext();
return true;
}else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//right
Log.i("GestureDemo", "ListView right");
mVf.showPrevious();
return true;
}
return false;
}

@Override
public void onLongPress(MotionEvent e) {
System.out.println("Listview long press");
int position = pointToPosition((int)e.getX(), (int)e.getY());
if( position != ListView.INVALID_POSITION) {
View child = getChildAt(position - getFirstVisiblePosition());
if(child != null) GestureListView.this.showContextMenuForChild(child);
}
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {
return false;
}

@Override
public void onShowPress(MotionEvent e) {

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}

});
}
}

热点排行