首页 > 代码库 > android 拖拽图片&拖动浮动按钮到处跑
android 拖拽图片&拖动浮动按钮到处跑
来自老外:
import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.os.Bundle;import android.view.MotionEvent ;import android.widget.AbsoluteLayout;import android.widget.Button;public class Drag_And_Drop extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); MyView tx = new MyView(this); tx.setText("Drag Me"); AbsoluteLayout l = new AbsoluteLayout(this); AbsoluteLayout.LayoutParams p = new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT,AbsoluteLayout.LayoutParams.WRAP_CONTENT,10,10); l.addView(tx,p); setContentView(l); }}class MyView extends Button{ public MyView(Context c){ super(c); } @Override public boolean onMotionEvent(MotionEvent event) { int action = event.getAction(); int mCurX = (int)event.getX(); int mCurY = (int)event.getY(); if ( action == MotionEvent.ACTION_MOVE ) { //this.setText("x: " + mCurX + ",y: " + mCurY ); AbsoluteLayout.LayoutParams p = newAbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT,AbsoluteLayout.LayoutParams.WRAP_CONTENT,this.mLeft + mCurX,this.mTop +mCurY); this.setLayoutParams (p); } if ( action == MotionEvent.ACTION_UP ) { //this.setText("not moving"); } return true; } @Override public void draw(Canvas canvas) { // TODO Auto-generated method stub super.draw(canvas); } }
拖拽图片效果
方法一:
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; }}); } }
布局文件
<?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>
方法二:
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. */ @Override public 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 the temp[0] = (int) event.getX(); temp[1] = y - v.getTop(); break; case MotionEvent.ACTION_MOVE: // touch drag with the ball v.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; } }); }}
另一种:
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 stub switch (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 stub int 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 拖拽图片&拖动浮动按钮到处跑
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。