android 拖动图片/拖动浮动按钮

Java代码

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);

}

}

拖拽图片效果

方法一:

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;

}});

}

}

方法二:

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 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. 代码

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. */

@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;

}

});

}

}

另一种:

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 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;

}

});

}

}

再一个,浮动按钮的实现。

主要功能:

点击按钮可以进行拖动;

当点击按钮时按钮会出现于所有按钮的最上方;

Java代码

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();

}

}

更多相关文章

  1. android EditText设置不可写
  2. Android学习-ProgressBar、SeekBar
  3. Android锁屏控制
  4. Android利用tcpdump抓包
  5. Android横竖屏总结
  6. Android--Intent常用(拨号,浏览器,联系人,Wi-Fi)
  7. android中的按钮以图片的方式显示_基础篇
  8. [Android(安卓)特效] Android(安卓)通过流播放声音(三)
  9. Android隐藏输入法软键盘的注意事项

随机推荐

  1. 大部分中产阶级都只是靠工资过中产,如何增
  2. 我就是要单打独斗
  3. 我们没有退路,只有不断向前
  4. 不断持续做,未来就已经到来
  5. 全力以赴让人喜乐
  6. 保持忠贞是不容易的,需要持续付出努力
  7. 必会10大软件测试软件工具,不知道的快收藏
  8. 现在发觉,我要做的是一件产品
  9. 坚持不是苦差事,而是一种享受
  10. 生活不复杂,简简单单就好