- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用第三方库。它使图像可拖动,并在您捏合和旋转时缩放。我正在尝试实现图像的删除,并制定了一种方法来删除您将手指放在上面的图像。现在我只需要调用它。我唯一成功调用它的地方是 onDraw。理想情况下,我会在 doubleTap 上调用它,因为用户会长按它来拖动它。但是 longClick 显然更容易,所以我首先测试了它。这是我的代码。滚动到底部以查看我的 setOnClickListener。我将向您展示 setOnClickListener 之前的类代码,以便为您提供一些背景信息:
public class PhotoSortrView extends View implements MultiTouchObjectCanvas<PhotoSortrView.Img> {
private ArrayList<Integer> mDrawables = new ArrayList<Integer>();// { R.drawable.m74hubble, R.drawable.catarina, R.drawable.tahiti, R.drawable.sunset, R.drawable.lake };
public void addDrawable(int drawable, Context context){
Resources res = context.getResources();
mDrawables.add(drawable);
mImages.add(new Img(drawable, res));
invalidate();
}
private ArrayList<Img> mImages = new ArrayList<Img>();
private AppUser user;
// --
private MultiTouchController<Img> multiTouchController = new MultiTouchController<Img>(this);
// --
private PointInfo currTouchPoint = new PointInfo();
private boolean mShowDebugInfo = true;
private static final int UI_MODE_ROTATE = 1, UI_MODE_ANISOTROPIC_SCALE = 2;
private int mUIMode = UI_MODE_ROTATE;
// --
private Paint mLinePaintTouchPointCircle = new Paint();
// ---------------------------------------------------------------------------------------------------
public PhotoSortrView(Context context) {
this(context, null);
}
public PhotoSortrView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PhotoSortrView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
@SuppressWarnings("deprecation")
private void init(Context context) {
Resources res = context.getResources();
for (int i = 0; i < mDrawables.size(); i++)
mImages.add(new Img(mDrawables.get(i), res));
mLinePaintTouchPointCircle.setColor(Color.YELLOW);
mLinePaintTouchPointCircle.setStrokeWidth(5);
mLinePaintTouchPointCircle.setStyle(Style.STROKE);
mLinePaintTouchPointCircle.setAntiAlias(true);
this.setLongClickable(true);
this.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(getContext(), "Long Clicked", Toast.LENGTH_SHORT).show();
Log.d("long clicking", "long clicking");
return true;
}
});
}
我是 Android 的新手,所以可能不完全理解这个库类的上下文。我在我的 Activity 中这样称呼这个类:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dressing_room);
photoSorter = new PhotoSortrView(this);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
this.addContentView(photoSorter, params);
它是一个被添加到这个 Activity 中的 View ,但它有一个 Canvas 并且可以添加很多可拖动的图像。谢谢。
编辑 我把它改成
this.setOnTouchListener(new View.OnTouchListener() {
// @Override
//public boolean onLongClick(View v) {
// Toast.makeText(getContext(), "Long Clicked", Toast.LENGTH_SHORT).show();
// Log.d("long clicking", "long clicking");
// return true;
// }
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(getContext(), "Long Clicked", Toast.LENGTH_SHORT).show();
Log.d("long clicking", "long clicking");
return false;
}
});
}
那行得通。我们可以从那里得到 doubleTap 吗?
最佳答案
有一个内置的GestureDetector能够“捕获”设备与用户之间的所有常见交互,包括双击。然而,要为单个 View 或选择的 View 设置它,您必须做一些繁重的工作。我现在将发布我的测试 Activity 的代码:
public class MainActivity extends Activity implements OnClickListener {
private GestureDetector gd;
View.OnTouchListener otl;
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onDoubleTap(MotionEvent e) {
Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_SHORT).show();
return true;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gd = new GestureDetector(this, new MyGestureDetector());
otl = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gd.onTouchEvent(event);
}
};
LinearLayout cotainerView = (LinearLayout) findViewById(R.id.container);
TextView tvNormal = new TextView(this);
tvNormal.setText("Normal text view");
tvNormal.setHeight(50);
DoubleTapTextView tvDoubleTap = new DoubleTapTextView(this);
tvDoubleTap.setText("Double tap text view");
tvDoubleTap.setHeight(50);
tvDoubleTap.setOnClickListener(this);
tvDoubleTap.setOnTouchListener(otl);
containerView.addView(tvNormal);
containerView.addView(tvDoubleTap);
}
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
所以诀窍是将 onTouch 事件及其参数 (MotionEvent e
) 传递给您的自定义 GestureListener。这样,每个手势(触摸事件)都将被监听,但您的自定义监听器将仅在双击手势的情况下执行 onDoubleTap(MotionEvent e)
方法。希望您理解这背后的想法,作为奖励,我发布了在模拟器中运行的应用程序的屏幕截图,以向您展示该事件实际上已被捕获:)
编辑:这里是解决方案的关键点
Activity 实现 OnClickListener
为 OnClickLister
和 OnTouchListener
注册所需的 View
tvDoubleTap.setOnClickListener(this); //Your activity implements OnClickListener
tvDoubleTap.setOnTouchListener(otl); //The wrapper listener from which you call your custom one
在基本的 OnTouchListener 中,将参数传递给您的自定义 GestureListener
@Override
public boolean onTouch(View v, MotionEvent event) {
return gd.onTouchEvent(event);
}
在您的自定义 GestureListener 的 onDoubleTap(MotionEvent e)
方法中,实现您的解决方案。
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onDoubleTap(MotionEvent e) {
Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_SHORT).show();
return true;
}
}
致谢:感谢 gav ,因为他对 his question 的研究
关于android - setOnLongClickListener 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21072957/
我正在使用第三方库。它使图像可拖动,并在您捏合和旋转时缩放。我正在尝试实现图像的删除,并制定了一种方法来删除您将手指放在上面的图像。现在我只需要调用它。我唯一成功调用它的地方是 onDraw。理想情况
我希望按钮 1、2、3 响应长按,提示用户输入文本按钮。我在 onCreate 中写道: Button botonEditable; Context context; @Override public
我在 ListView 中看到过很多 setOnLongClickListener 的例子,但我使用的是 AndroidHive's ExpandableListView ,因此它似乎无法识别(错误:
我使用 setOnLongClickListener() 添加了一个长按监听器.通常,长按监听器会按预期调用。然而,有时长按似乎被中止了( View 高亮显示,但随后取消高亮显示,即使它仍然被按下)。
我下载了 android-pinch jar,这样我就可以拥有缩放功能。我遇到的问题是我必须执行 setOnLongClickListener 因为我想创建一个 DragShadow 供用户在拖动图标
setOnClickListener 和 setOnLongClickListener 不能同时工作。当我删除一个时,另一个起作用,反之亦然。 另外我要说的是,如果把第一行代码改成childRelat
如果有人可以的话,我需要你的帮助,这对我的解决方案来说是件好事。我不知道这是否可能,但我想尝试解决这个问题。实际上我想在单按钮点击事件上实现两种方法,简单点击和长按,这里是我的代码:: homebut
我一直在尝试设置长按监听事件,但不断收到以下错误: Type mismatch. Required:Boolean Found:Unit 我对 setOnClickListener 事件没有任何问题,
我可以将 setOnclickListener 或 setOnLongClickListener 放在 onBindViewHolder 中吗? onBindViewHolder这个方法写的没问题吧?
我希望对 listView 进行两种类型的点击 - onClick 和 LongClick。 我是这样实现的: this.listViewSub = (ListView) this.findViewB
如何在 ListView 的每个项目中使用 setOnItemClickListner? 我的 xml: 这是我的适配器类 inner class mo3d1Adapter : BaseAdapt
在 setOnClickListener 的帮助下,我能够在相应的“-”或“-”按钮单击上递增/递减。但如果我继续按住(长按)“+”或“-”按钮,我想继续增加/减少尊重计数器。就像在 map 中一样,
我有一个应用程序,您可以在其中按屏幕并执行一个方法,并且您可以在其中长按并执行另一个方法。问题是,当我长按屏幕时,正常的 onClickListener 也会被执行,这是我不想要的。它们都是简单的on
正如主题所暗示的,setOnItemClickListener 在使用 setOnLongClickListener 时不起作用,我在基本适配器中使用的布局如下,
我真的可以对同一个按钮使用这些 setOnLongClickListener 和 setOnClickListener 吗?因为如果我长按按钮,longclick 和 normal click 都会被
本文整理了Java中com.koolearn.klibrary.ui.android.view.ZLAndroidWidget.setOnLongClickListener()方法的一些代码示例,展示
我有一个想要响应长按的 ImageView。 我已经在另一个应用程序中实现了这个方法,没有任何问题,但我只是将代码复制并粘贴到另一个应用程序中,它给了我以下语法错误: The method setOn
运行时我改变了背景图像(设置背景)。在图像中,我使用 Touch Listener 执行了操作。但就我而言,我需要对 Touch 事件执行另一个操作。为此,我需要继续长按事件。给我建议,任何其他想法。
我是一名优秀的程序员,十分优秀!