求android自定义控件如何添加点击事件,长按事件 重写了一个TextView,现在想让它在点击后触发某个操作,长按后触发某个操作 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 让自己view实现OnGestureListener接口在你的类中组合一个GestureDetector detector = private GestureDetector(this);对象重写自己view的onTouchEvent(MotionEvent event)方法在此方法中调用detector.onTouchEvent(event)这个方法这样你就可以在onLongPress这个方法中想干嘛就干嘛啦。 我无聊写了个玩玩,你看看吧package lon.detector;import android.content.Context;import android.util.Log;import android.view.GestureDetector;import android.view.GestureDetector.OnGestureListener;import android.view.MotionEvent;import android.widget.TextView;public class MyText extends TextView implements OnGestureListener{ private GestureDetector detector; public MyText(Context context) { super(context); detector = new GestureDetector(this); } @Override public boolean onTouchEvent(MotionEvent event) { detector.onTouchEvent(event); return super.onTouchEvent(event); } public boolean onDown(MotionEvent e) { Log.e("-----", "---: on Down"); return false; } public void onShowPress(MotionEvent e) { Log.e("-----", "---: on ShowPress"); } public boolean onSingleTapUp(MotionEvent e) { Log.e("-----", "---: on SingleTapUp"); return false; } public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.e("-----", "---: on Scroll"); return false; } public void onLongPress(MotionEvent e) { Log.e("-----", "---: on Long"); } public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.e("-----", "---: on fling"); return false; }} 单击的事件是在onDown()里面写吧,但是onLongPress()方法也会先触发onDown()方法啊,应该怎么办啊,还请多多指教 onSingleTapUp(MotionEvent e) 这个好像就是单击吧 跟长按区分开了 @Override public boolean onTouchEvent(MotionEvent event) { detector.onTouchEvent(event); return super.onTouchEvent(event); }将这个函数的返回值改为true,就可以区分单击onSingleTapUp和长按啦onLongPress时间啦。文档看了 也不是很清楚 ,lz你自己在弄弄吧,知道什么原因就告诉我,按我的理解是TextView这个类在监听按钮类型事件的时候比不上Button那么强大吧 看下button的源代码吧,button继承自textView。懂了吧楼主,仿照button代码修改 谢谢,我在onSingleTapUp里实现了,非常感谢 你在onSingleTapUp里面写上要实现的部分就行了 求解View的getWidth()和getHeight()何时才能取到值 程序无法在模拟器上运行 关于获取当前位置的问题 网络传输String对象 Android/IOS移动互联网推送数据问题! android 4.4 Email 登搜狐邮箱 imap,加载不到邮件。 屏蔽系统中开发者选项 JSON的解析问题 android之路 android模拟器能模拟插入U盘吗? Android开源,开在哪呢? 有关setAnimationListener的问题求助
在你的类中组合一个GestureDetector detector = private GestureDetector(this);对象
重写自己view的onTouchEvent(MotionEvent event)方法在此方法中调用detector.onTouchEvent(event)这个方法
这样你就可以在onLongPress这个方法中想干嘛就干嘛啦。
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.widget.TextView;public class MyText extends TextView implements OnGestureListener
{
private GestureDetector detector;
public MyText(Context context)
{
super(context);
detector = new GestureDetector(this);
} @Override
public boolean onTouchEvent(MotionEvent event)
{
detector.onTouchEvent(event);
return super.onTouchEvent(event);
} public boolean onDown(MotionEvent e)
{
Log.e("-----", "---: on Down");
return false;
} public void onShowPress(MotionEvent e)
{
Log.e("-----", "---: on ShowPress");
} public boolean onSingleTapUp(MotionEvent e)
{
Log.e("-----", "---: on SingleTapUp");
return false;
} public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY)
{
Log.e("-----", "---: on Scroll");
return false;
} public void onLongPress(MotionEvent e)
{
Log.e("-----", "---: on Long");
} public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY)
{
Log.e("-----", "---: on fling");
return false;
}}
public boolean onTouchEvent(MotionEvent event)
{
detector.onTouchEvent(event);
return super.onTouchEvent(event);
}将这个函数的返回值改为true,就可以区分单击onSingleTapUp和长按啦onLongPress时间啦。
文档看了 也不是很清楚 ,lz你自己在弄弄吧,知道什么原因就告诉我,按我的理解是TextView这个类在监听按钮类型事件的时候比不上Button那么强大吧