搬砖,android drag and drop button or image
16lz
2022-07-27
拖拽图片效果
方法二:
拖动按钮到处跑
1. 布局文件XML
2. 代码
另一种:
Java代码
再一个,浮动按钮的实现。
主要功能:
点击按钮可以进行拖动;
当点击按钮时按钮会出现于所有按钮的最上方;
方法一
import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; public class DragSample01 extends Activity { ImageView img; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.drag_sample01); img = (ImageView)findViewById(R.id.img_view); img.setOnTouchListener(new OnTouchListener(){ private int mx, my; public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_MOVE: mx = (int)(event.getRawX()); my = (int)(event.getRawY() - 50); v.layout(mx - img.getWidth()/2, my - img.getHeight()/2, mx + img.getWidth()/2, my + img.getHeight()/2); break; } return true; }}); } }
方法二:
import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; public class DragSample01 extends Activity { ImageView img; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.drag_sample01); img = (ImageView)findViewById(R.id.img_view); img.setOnTouchListener(new OnTouchListener(){ private float x, y; private int mx, my; public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: x = event.getX(); y = event.getY(); case MotionEvent.ACTION_MOVE: mx = (int)(event.getRawX() - x); my = (int)(event.getRawY() - 50 - y); v.layout(mx, my, mx + v.getWidth(), my + v.getHeight()); break; } return true; }}); } }
拖动按钮到处跑
1. 布局文件XML
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><Button android:id="@+id/btn" android:layout_width="fill_parent"android:layout_height="wrap_content" android:text="拖动看看~~" /></LinearLayout>
2. 代码
import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.Button;public class DraftTest extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);final Button btn = (Button) findViewById(R.id.btn);btn.setOnTouchListener(new OnTouchListener() {int[] temp = new int[] { 0, 0 };public boolean onTouch(View v, MotionEvent event) {int eventaction = event.getAction();int x = (int) event.getRawX();int y = (int) event.getRawY();switch (eventaction) {case MotionEvent.ACTION_DOWN: // touch down so check if thetemp[0] = (int) event.getX();temp[1] = y - v.getTop();break;case MotionEvent.ACTION_MOVE: // touch drag with the ballv.layout(x - temp[0], y - temp[1], x + v.getWidth()- temp[0], y - temp[1] + v.getHeight());//v.postInvalidate();break;case MotionEvent.ACTION_UP:break;}return false;}});}}
另一种:
Java代码
import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.Button;public class DraftTest extends Activity {/** Called when the activity is first created. */public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);DisplayMetrics dm = getResources().getDisplayMetrics();final int screenWidth = dm.widthPixels;final int screenHeight = dm.heightPixels - 50;final Button b = (Button) findViewById(R.id.btn);b.setOnTouchListener(new OnTouchListener() {int lastX, lastY;public boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubswitch (event.getAction()) {case MotionEvent.ACTION_DOWN:lastX = (int) event.getRawX();lastY = (int) event.getRawY();break;case MotionEvent.ACTION_MOVE:int dx = (int) event.getRawX() - lastX;int dy = (int) event.getRawY() - lastY;int left = v.getLeft() + dx;int top = v.getTop() + dy;int right = v.getRight() + dx;int bottom = v.getBottom() + dy;if (left < 0) {left = 0;right = left + v.getWidth();}if (right > screenWidth) {right = screenWidth;left = right - v.getWidth();}if (top < 0) {top = 0;bottom = top + v.getHeight();}if (bottom > screenHeight) {bottom = screenHeight;top = bottom - v.getHeight();}v.layout(left, top, right, bottom);lastX = (int) event.getRawX();lastY = (int) event.getRawY();break;case MotionEvent.ACTION_UP:break;}return false;}});}}
再一个,浮动按钮的实现。
主要功能:
点击按钮可以进行拖动;
当点击按钮时按钮会出现于所有按钮的最上方;
import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.text.style.AbsoluteSizeSpan;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.AbsoluteLayout;import android.widget.Button;public class HelloWorld2 extends Activity { /** Called when the activity is first created. */AbsoluteLayout mLayoutGroup = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); mLayoutGroup = new AbsoluteLayout(this); AbsoluteLayout.LayoutParams layoutParams = new AbsoluteLayout.LayoutParams (320, 480, 0, 0); setContentView(mLayoutGroup, layoutParams); Button button= new Button(this); button.setText("testButton"); layoutParams = new AbsoluteLayout.LayoutParams(120, 60, 20, 20); mLayoutGroup.addView(button, layoutParams); button.setOnClickListener(new OnClickListener() {public void onClick(View arg0) {// TODO Auto-generated method stub//alert();}}); button.setOnTouchListener(touchListener); final Button btButton = new Button(this); btButton.setText("测试按钮移动"); layoutParams = new AbsoluteLayout.LayoutParams(120, 60, 20, 160); mLayoutGroup.addView(btButton, layoutParams); btButton.setOnTouchListener(touchListener); } OnTouchListener touchListener = new OnTouchListener() { int temp[] = new int[]{0, 0};public boolean onTouch(View arg0, MotionEvent arg1) {// TODO Auto-generated method stubint eventAction = arg1.getAction();Log.e("testButtonMove", "OnTouchAction:"+eventAction);int x = (int)arg1.getRawX();int y = (int)arg1.getRawY();switch (eventAction) {case MotionEvent.ACTION_DOWN:temp[0] = (int)arg1.getX();temp[1] = (int)(y-arg0.getTop());mLayoutGroup.bringChildToFront(arg0);arg0.postInvalidate();break;case MotionEvent.ACTION_MOVE:int left = x - temp[0];int top = y - temp[1];int right = left + arg0.getWidth();int bottom = top + arg0.getHeight();arg0.layout(left, top, right, bottom);arg0.postInvalidate();break;default:break;}return false;} }; void alert() { new AlertDialog.Builder(this) .setNeutralButton("OK", new DialogInterface.OnClickListener() {public void onClick(DialogInterface arg0, int arg1) {// TODO Auto-generated method stub}}).setTitle("test button").setMessage("test test test!!!").show(); } }
更多相关文章
- android EditText设置不可写
- Android(安卓)拨号器的简单实现
- android 使用html5作布局文件: webview跟javascript交互
- android studio调试c/c++代码
- android用户界面之按钮(Button)教程实例汇
- Android开发环境搭建
- IM-A820L限制GSM,WCDMA上网的原理(其他泛泰机型可参考)7.13
- 锁屏界面
- android(NDK+JNI)---Eclipse+CDT+gdb调试android ndk程序