您的位置:首页 > 移动开发 > Android开发

android 拖拽图片&拖动浮动按钮到处跑

2012-05-16 13:35 288 查看
转载来自:/article/3746777.html



来自老外:

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 = new
AbsoluteLayout.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;
}});
}
}


方法二:

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 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. */
@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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: