通过触摸移动按钮
Posted
技术标签:
【中文标题】通过触摸移动按钮【英文标题】:Moving buttons via Touch 【发布时间】:2013-10-07 07:31:46 【问题描述】:我想通过触摸将我的按钮移动到另一个位置。我的意思是如果用户触摸一个按钮并通过触摸转到另一个地方,按钮就会移动。我为其中一个按钮编写了这段代码,但是当我触摸一个按钮时,三个按钮也会移动,一个按钮不能向右或向左移动,当我移动到屏幕顶部时,图像按钮的一部分被删除!
有什么问题?我该如何解决这个问题?我想在 android +2.2 中运行这个程序
onButton.setOnTouchListener(new OnTouchListener()
@Override
public boolean onTouch(View v, MotionEvent event)
// TODO Auto-generated method stub
switch(event.getAction())
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams relativeLayout=(RelativeLayout.LayoutParams) oneButton.getLayoutParams();
int x=(int)event.getRawX();
int y=(int)event.getRawY();
relativeLayout.leftMargin=x-50;
relativeLayout.rightMargin=x-50;
relativeLayout.topMargin=y-50;
relativeLayout.bottomMargin=y-50;
oneButton.setLayoutParams(relativeLayout);
break;
default:
break;
return true;
);
xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<ImageView
android:id="@+id/img"
android:src="@drawable/root"
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/btnOne"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:layout_marginRight="35dip"
android:layout_alignParentTop="true"
android:layout_marginTop="70dip"
android:src="@drawable/oneButton"
android:background="@null"
android:visibility="invisible"/>
<ImageButton
android:id="@+id/btnTwo"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_marginLeft="35dip"
android:layout_alignParentTop="true"
android:layout_marginTop="70dip"
android:src="@drawable/twoButton"
android:background="@null"
android:visibility="invisible"/>
<ImageButton
android:id="@+id/btnThree"
android:layout_
android:layout_
android:layout_below="@id/btnOne"
android:layout_alignParentLeft="true"
android:layout_marginLeft="15dip"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dip"
android:src="@drawable/ThreeButton"
android:background="@null"
android:visibility="invisible"/>
<ImageButton
android:id="@+id/btnFour"
android:layout_
android:layout_
android:layout_below="@id/btnTwo"
android:layout_alignParentRight="true"
android:layout_marginRight="15dip"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dip"
android:src="@drawable/fourButton"
android:background="@null"
android:visibility="invisible"/>
</RelativeLayout>
谢谢....
【问题讨论】:
这里没有人帮助我!! 【参考方案1】:创建一个实现 OnTouchListener 的新类
import android.annotation.SuppressLint;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.RelativeLayout;
public class MultiTouchListener implements OnTouchListener
private float mPrevX;
private float mPrevY;
public MainActivity mainActivity;
public MultiTouchListener(MainActivity mainActivity1)
mainActivity = mainActivity1;
@Override
public boolean onTouch(View view, MotionEvent event)
float currX,currY;
int action = event.getAction();
switch (action )
case MotionEvent.ACTION_DOWN:
mPrevX = event.getX();
mPrevY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
currX = event.getRawX();
currY = event.getRawY();
MarginLayoutParams marginParams = new MarginLayoutParams(view.getLayoutParams());
marginParams.setMargins((int)(currX - mPrevX), (int)(currY - mPrevY),0, 0);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
view.setLayoutParams(layoutParams);
break;
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_UP:
break;
return true;
现在在您的 Main 活动中,在您的视图上设置 OnTouchListener...即您的 imageButton 或 imageView;
MultiTouchListener touchListener=new MultiTouchListener(this);
onButton.setOnTouchListener(touchListener);
【讨论】:
感谢您的代码,但我的程序再次出现问题:(当我触摸并尝试移动到另一个地方时,btnFour 与 btnOne 一起移动(两者一起!!)当我触摸 btnTwo 时,btnThree 移动这(但在我触摸 btnThree 和 btnFour 之前,这首先发生了!)我希望当用户单击按钮时,显示另一个活动,我使用 onClick() 方法实现了这个,但现在使用此代码,onClick() 方法不起作用。我在 MultiTouchListener 类中添加了哪些代码来解决 onClick()??谢谢 在你的 XML 中的 button 标签中添加以下内容,你要点击的按钮 android:focusable="true" android:focusableInTouchMode="true" 另一个问题是当我将按钮移动到屏幕底部或屏幕右侧时,我的部分按钮被删除,就像按钮的一部分位于 ImageView 下。为什么?你有什么建议吗? 我添加了这段代码,但我的问题没有解决。我再次触摸我的按钮不显示另一个活动,当我先触摸 btnOne 和 btnTow 时,btnFour 和 btnThree 随之移动!我认为我的问题出在 xml 文件中,但我不知道如何解决这个问题。 对于按钮跳出屏幕的问题。您可以在 MotionEvent.ACTION_MOVE: 中设置一些条件来检查您的视图是否不会跳出屏幕。为此,您可以使用 if(currX以上是关于通过触摸移动按钮的主要内容,如果未能解决你的问题,请参考以下文章
触摸屏幕上的任何位置,除了 GUI 按钮 Android Unity
(Swift) 如何使用触摸按钮更改 pageviewcontroller 中的视图