我目前正在摆弄Android编程,但我在检测不同的触摸事件时遇到一个小问题,即正常触摸按下(按下屏幕并立即释放),长按(触摸屏幕并按住手指) )和移动(在屏幕上拖动).
我想要做的是在屏幕上有一个图像(圆圈),我可以拖动它.然后,当我按一次(短/正常按下)时,Toast会提供一些关于它的基本信息.当我长按它时,会出现一个带有列表的AlertDialog来选择不同的图像(圆形,矩形或三角形).
我使用自己的OnTouchListener创建了一个自定义视图来检测事件并在onDraw中绘制图像.OnTouchListener.onTouch是这样的:
// has a touch press started?
private boolean touchStarted = false;
// co-ordinates of image
private int x, y;
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
touchStarted = true;
}
else if (action == MotionEvent.ACTION_MOVE) {
// movement: cancel the touch press
touchStarted = false;
x = event.getX();
y = event.getY();
invalidate(); // request draw
}
else if (action == MotionEvent.ACTION_UP) {
if (touchStarted) {
// touch …Run Code Online (Sandbox Code Playgroud) 我想使用相同的按钮来执行2种不同的方法.用户单击它时的一种方法和用户LONG单击它时的第二种方法(不同).
我用它来进行单击(这非常有效):
Button downSelected = (Button) findViewById(R.id.downSelected);
downSelected.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
method();
}
}
});
Run Code Online (Sandbox Code Playgroud)
我试图添加一个longClickListener但它没有用.
欣赏有关如何解决这个问题的任何想法.
谢谢!
我想创建一个线性布局,其行为与ImageButton类似.
<LinearLayout
android:id="@+id/container"
style="?WidgetHomeIconContainer">
<ImageView
android:id="@+id/icon"
style="?WidgetHomeIcon" />
<TextView
android:id="@+id/title"
style="?WidgetHomeLabel"
android:text="@string/title"
android:textAppearance="?attr/TextHomeLabel" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
在ImageView,TextView和LinearLayout的样式中,我为所有状态设置了一个选择器.
现在:
所以我想做以下几点.当我点击父LinearLayout时,我需要将它的所有子项更改为按下状态.
我尝试将以下代码添加到LinearLayout onClickListener以传播点击:
@Override
public void onClick(View v)
{
LinearLayout l = (LinearLayout) v;
for(int i = 0; i < l.getChildCount(); i++)
{
l.getChildAt(i).setClickable(true);
l.getChildAt(i).performClick();
}
}
Run Code Online (Sandbox Code Playgroud)
但它仍然保持相同的状态.非常感谢您的帮助.
我尝试从这个问题实现代码:用Android检测长按,但它总是检测到长按,即使我只是点击它.我的代码如下(我扩展了ImageView,因为其中包含更多代码,与此问题无关):
public class EbsImageView extends ImageView {
final GestureDetector gestureDetector = new GestureDetector(this.getContext(), new GestureDetector.SimpleOnGestureListener() {
public void onLongPress(MotionEvent e) {
Log.e("", "Longpress detected");
}
public boolean onSingleTapUP(MotionEvent e) {
Log.e("", "Press detected");
// don't consume, we want the long press to fire if it was a
// long press
return false;
}
});
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
}
Run Code Online (Sandbox Code Playgroud) 我有imageView.我使用平底锅,捏捏imageView.有时我需要删除imageView.所以,我使用OnLongClickListener删除图像.当我使用长按我的imageView删除.但是,当我使用OnTouchListener进行平移时,会激活imageView OnLongPress并从视图中删除我的imageView.怎么解决这个?
码:
imageView.setOnLongClickListener(new OnLongClickListener(){
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
imageView.setVisibility(View.GONE);
return true;
}
});
imageView.setOnTouchListener(new View.OnTouchListener() {
final Handler handler = new Handler();
Runnable mLongPressed = new Runnable() {
public void run() {
Log.i("", "Long press!");
}
};
@Override
public boolean onTouch(View v,MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == MotionEvent.ACTION_DOWN)
handler.postDelayed(mLongPressed, 1000);
if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP))
handler.removeCallbacks(mLongPressed);
layoutParams = (RelativeLayout.LayoutParams) imageView.getLayoutParams();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN :
{
parms = …Run Code Online (Sandbox Code Playgroud) android ontouchlistener onlongclicklistener android-imageview
简短版本:我想要一种方法在onTouchEvent上启动基于时间的计数器,并测试在响应之前是否已经过了一定的时间,作为手动LongTouch检测.
说明:我有一个自定义的imageView,可以在两指翻转的屏幕上滑入/滑出屏幕.我想向它添加拖动事件,但这些需要比长按更快.我可以通过使用每个onTouchEvent更新一次的计数器来延迟拖动事件,并且仅触发拖动,例如10次计数,但计数器仅更新触摸事件并且手指必须移动.
如何创建一个基于时间的计数器,一个活动级别字段,每秒递增60次或某些?