您的位置:首页 > 其它

自定义一个view,并实现最简单的手势识别功能(上)

2014-04-11 14:11 1036 查看
自定义一个view,并实现最简单的手势识别功能,并通过输出log进行简单分析。

package com.example.mygesturedetector;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class MyView extends View {
private String TAG = "MYVIEW";

private GestureDetector myGestrueDetector;

public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
init(context);
}
public MyView(Context context,AttributeSet attrs) {
super(context);
// TODO Auto-generated constructor stub
init(context);
}
private void init(Context context) {
// TODO Auto-generated method stub

this.myGestrueDetector = new GestureDetector(context,
new MyOnGestureListener());

this.setOnTouchListener(new MyOnTouchListener());

this.setLongClickable(true);

invalidate();

}
class MyOnGestureListener implements OnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
Log.v(TAG, "onDown()-------------------pass");
return false;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
Log.v(TAG, "onFling()-------------------pass");
return false;
}

@Override
public void onLongPress(MotionEvent e) {
Log.v(TAG, "onLongPress()-------------------pass");
// TODO Auto-generated method stub

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
Log.v(TAG, "onScroll()-------------------pass");
// TODO Auto-generated method stub
return false;
}

@Override
public void onShowPress(MotionEvent e) {
Log.v(TAG, "onShowPress()-------------------pass");
// TODO Auto-generated method stub

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.v(TAG, "onSingleTapUp()-------------------pass");
// TODO Auto-generated method stub
return false;
}

}
class MyOnTouchListener implements OnTouchListener{

@Override
public boolean onTouch(View v, MotionEvent event) {
Log.v(TAG, "onTouch()-------------------pass");
// TODO Auto-generated method stub
return myGestrueDetector.onTouchEvent(event);
}

}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawARGB(255, 255, 255, 0);
}

}


其中xml布局文件如下:

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"/>
<com.example.mygesturedetector.MyView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/myview"
android:layout_below="@id/tv"
/>

</RelativeLayout>

Activity的代码如下:

packagecom.example.mygesturedetector;

importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.view.Menu;

publicclass MainActivity extends Activity {

@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
publicboolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main,menu);
returntrue;
}

}
最后输出log如下:

点击屏幕
04-1113:48:18.572: V/MYVIEW(5846): onTouch()-------------------pass
04-1113:48:18.572: V/MYVIEW(5846): onDown()-------------------pass
04-1113:48:18.616: V/MYVIEW(5846): onTouch()-------------------pass
04-1113:48:18.616: V/MYVIEW(5846): onSingleTapUp()-------------------pass

小幅度滑动屏幕
04-1113:50:22.711: V/MYVIEW(6129): onDown()-------------------pass
04-1113:50:22.736: V/MYVIEW(6129): onTouch()-------------------pass
04-1113:50:22.736: V/MYVIEW(6129): onScroll()-------------------pass
04-1113:50:22.746: V/MYVIEW(6129): onTouch()-------------------pass
04-1113:50:22.746: V/MYVIEW(6129): onScroll()-------------------pass
04-1113:50:22.766: V/MYVIEW(6129): onTouch()-------------------pass
04-1113:50:22.766: V/MYVIEW(6129): onScroll()-------------------pass

大幅度滑动屏幕
04-1113:50:22.711: V/MYVIEW(6129): onTouch()-------------------pass
04-1113:50:22.711: V/MYVIEW(6129): onDown()-------------------pass
04-1113:50:22.736: V/MYVIEW(6129): onTouch()-------------------pass
04-1113:50:22.736: V/MYVIEW(6129): onScroll()-------------------pass
04-1113:50:22.746: V/MYVIEW(6129): onTouch()-------------------pass
04-1113:50:22.746: V/MYVIEW(6129): onScroll()-------------------pass
04-1113:50:22.766: V/MYVIEW(6129): onTouch()-------------------pass
04-1113:50:22.766: V/MYVIEW(6129): onScroll()-------------------pass
04-1113:50:22.777: V/MYVIEW(6129): onTouch()-------------------pass
04-1113:50:22.777: V/MYVIEW(6129): onFling()-------------------pass

长按屏幕
04-1114:05:01.006: V/MYVIEW(6349): onTouch()-------------------pass
04-1114:05:01.006: V/MYVIEW(6349): onDown()-------------------pass
04-1114:05:01.127: V/MYVIEW(6349): onShowPress()-------------------pass
04-1114:05:01.626: V/MYVIEW(6349): onLongPress()-------------------pass
04-1114:05:04.690: V/MYVIEW(6349): onTouch()-------------------pass

截图为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐