java – 使按钮移动触摸我们触摸的确切位置
发布时间:2020-12-15 02:16:37 所属栏目:Java 来源:网络整理
导读:我创建了一个应用程序,其中有一个按钮在触摸它时移动. 现在对于onTouch,我实现了一个不同的类.有两个类,一个是主要的CircleMActivity.java,另一个是onTouch. 现在应用程序运行正常,但有一个问题.当我点击按钮并移动它时它正在移动,但按钮和屏幕触摸之间有一
我创建了一个应用程序,其中有一个按钮在触摸它时移动.
现在对于onTouch,我实现了一个不同的类.有两个类,一个是主要的CircleMActivity.java,另一个是onTouch. 我想要的是将它移动到我触摸它的位置,而不是稍后移动或者你可以认为我想要在光标位置完全移动它. 码: CircleMActivity.java: public class CircleMActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_circle_m); Button b=(Button)findViewById(R.id.btn1); MultiTouch mtb=new MultiTouch(this); b.setOnTouchListener(mtb); } } MultiTouch.java: public class MultiTouch implements OnTouchListener{ float mPrevX,mPrevY; CircleMActivity cm; public MultiTouch(CircleMActivity circleMActivity) { // TODO Auto-generated constructor stub cm=circleMActivity; } @Override public boolean onTouch(View arg0,MotionEvent arg1) { // TODO Auto-generated method stub float currentX,currentY; int action=arg1.getAction(); switch(action){ case MotionEvent.ACTION_DOWN: mPrevX = arg1.getX(); mPrevY = arg1.getY(); break; case MotionEvent.ACTION_MOVE: currentX = arg1.getRawX(); currentY = arg1.getRawY(); MarginLayoutParams marginParams = new MarginLayoutParams( arg0.getLayoutParams()); marginParams.setMargins((int)( currentX - mPrevX),(int)( currentY - mPrevY),0); LayoutParams layoutParams = new LinearLayout.LayoutParams(marginParams); arg0.setLayoutParams(layoutParams); break; case MotionEvent.ACTION_CANCEL: break; case MotionEvent.ACTION_UP: break; } return true; } } activity_circle.xml: <LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="#000000" android:weightSum="100"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="4.95" android:background="#fff" android:orientation="vertical" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="X coord" android:textColor="#ff00ee" android:inputType="number" > <requestFocus /> </EditText> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Y coord" android:textColor="#ff00ee" android:inputType="number" /> <EditText android:id="@+id/editText3" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Radius" android:textColor="#ff00ee" android:inputType="number" /> <EditText android:id="@+id/editText4" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:textColor="#ff00ee" android:hint="Colour" android:inputType="number" /> </LinearLayout> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="4.95" android:background="@drawable/custom" /> " </LinearLayout> 那我该怎么做呢? 解决方法
这是一个简单的坐标数学.在你的
case MotionEvent.ACTION_DOWN: mPrevX = arg1.getX(); mPrevY = arg1.getY(); break; 使 mPrevY = arg1.getY()+250; 好吧它将走出儿童线性布局,但它看起来不错! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何将Integer包装类传递给java中的方法?
- Java的;运行时解释;添加插件的策略
- jpa – 如何使一个CriteriaBuilder与自定义的“on”条件一起
- java – 字符串的组合形成一个字符串给出不同的结果
- Java concurrency之公平锁(一)_动力节点Java学院整理
- java – 选择哪个ChoiceBox-Event?
- java – 如何启用Hystrix DEBUG级别日志记录
- Java:如何使这个Serializable?
- java – 查找所有用户的朋友:如何使用Hadoop Mapreduce实现
- java-ee – 将EAR部署到WebSphere时,“重复条目”SaveFailu