package com.cn.npass;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.SlidingDrawer;
/**
* 自定义slidingdrawer,使他只能拖拽无法点击
*
*/
public class ClickForbiddenSD extends SlidingDrawer {
//上一个触摸动作
private int mPerAction = MotionEvent.ACTION_UP;
//动作是否在handle上
private boolean mActionInHandle = false;
//上一个motionevent
private MotionEvent mPreEvent;
public ClickForbiddenSD(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 首先触发,判断触点是否在handle上,设置mActionInHandle
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
View view = this.getHandle();
Rect rect = getRectOnScreen(view);
mActionInHandle = rect.contains((int)event.getRawX(), (int)event.getRawY());
return super.onInterceptTouchEvent(event);
}
/**
* 获取该view在屏幕上的坐标
* @param view
* @return
*/
private Rect getRectOnScreen(View view){
Rect rect = new Rect();
int[] location = new int[2];
View parent = view;
if(view.getParent() instanceof View){
parent = (View)view.getParent();
}
parent.getLocationOnScreen(location);
view.getHitRect(rect);
rect.offset(location[0], location[1]);
return rect;
}
/**
* 判断是否是点击
* 如果是,屏蔽
* 如果是拖拽,则显示
* 逻辑很烦,有待优化,甚至放弃slidingdrawer用别的
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
if(mActionInHandle == false){
mPerAction = action;
return false;
}
if(action == MotionEvent.ACTION_UP && mPerAction == MotionEvent.ACTION_DOWN){
mPerAction = action;
return true;
}
if(action == MotionEvent.ACTION_MOVE && mPerAction == MotionEvent.ACTION_DOWN){
mPerAction = action;
super.onTouchEvent(mPreEvent);
super.onTouchEvent(event);
return true;
}
mPerAction = action;
if(action == MotionEvent.ACTION_DOWN){
mPreEvent = event;
return true;
}
return super.onTouchEvent(event);
}
}
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<com.cn.npass.ClickForbiddenSD
android:id="@+id/sliding_drawer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:content="@+id/tag_listView"
android:handle="@+id/tag_handle"
android:orientation="horizontal"
android:background="@drawable/bg" >
<ImageView
android:id="@id/tag_handle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/icon2" />
<ListView
android:id="@id/tag_listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:cacheColorHint="#00000000" />
</com.cn.npass.ClickForbiddenSD>
</merge>
package com.cn.npass;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener{
private ListView mListView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.taglist);
setupViews();
}
private void setupViews() {
mListView = (ListView) findViewById(R.id.tag_listView);
mListView.setAdapter(new ListViewAdapter());
}
private class ListViewAdapter extends BaseAdapter {
// 这里返回50行,ListView有多少行取决于getCount()方法
public int getCount() {
return 50;
}
public Object getItem(int arg0) {
return null;
}
public long getItemId(int arg0) {
return 0;
}
public View getView(int position, View v, ViewGroup parent) {
final LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
if (v == null) {
v = inflater.inflate(R.layout.listview_item, null);
}
TextView mBookName = (TextView) v.findViewById(R.id.bookname);
TextView mBookAuthor = (TextView) v.findViewById(R.id.author);
mBookName.setText("Android教程" + position);
mBookAuthor.setText("ss" + position);
return v;
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="6px" >
<TextView
android:id="@+id/bookname"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="#000000"
android:textSize="20px" />
<TextView
android:id="@+id/author"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textSize="16px" />
</LinearLayout>
</LinearLayout>
代码下载地址为:http://download.csdn.net/detail/niejing654092427/4568014