当前位置:编程学习 > wap >>

如何实现选中Gallery中的图片,在屏幕上四处移动?

各位大侠,最近有个问题,就是想选中Gallery中的图片在屏幕上移动,我搞了一天,获取选择项的位置,一直不对,请问有没有更好的思路,帮俺解决下,谢谢各位。 --------------------编程问答-------------------- import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class picActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}

class MyView extends View {
Canvas mCanvas;
Bitmap mBitmap, bmp1, bmp2;
Paint mPaint;
int flag = 0;
float movex, movey, lastx, lasty, initx, inity, initx2, inity2;
float X_r,Y_r;

public MyView(Context context) {
super(context);
X_r = 0;
Y_r = 0;
init();
}

public void init() {
mBitmap = Bitmap.createBitmap(240, 300, Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
bmp1 = BitmapFactory.decodeResource(getResources(),
R.drawable.a);// 这两个图片要换
bmp2 = BitmapFactory.decodeResource(getResources(),
R.drawable.icon);
mPaint = new Paint();
mPaint.setColor(0xFFFFFFFF);

drawImage(bmp2, 50, 0);
drawImage(bmp1, 150, 0);
}

protected void onDraw(Canvas canvas) {
canvas.drawColor(0xa1a1a1);
canvas.drawBitmap(mBitmap, X_r, Y_r, mPaint);
super.onDraw(canvas);
}

List<HashMap> list = new ArrayList<HashMap>();
HashMap map = null;

/* 在给定的位置画位图记录好他们的初始化坐标,放入一个集合中 */
public void drawImage(Bitmap bmp, float x, float y) {

if (bmp == null)
return;

/* 记录好图片坐标 */
map = new HashMap();
map.put("x", x);
map.put("y", y);
map.put("bmp", bmp);
list.add(map);
Log.d("MyView", "drawImage--->" + initx + ":" + inity);
float x_1 = bmp1.getWidth()/2;
float y_1 = bmp1.getHeight()/2;
mCanvas.drawBitmap(bmp, x-x_1, y-y_1, mPaint);
invalidate();
}

/* 传入点击的坐标点获得位图 */
public Bitmap bmpClick(float mx, float my) {
Bitmap bmpy = null;
HashMap hashMap = null;
for (Iterator<HashMap> it = list.iterator(); it.hasNext();) {
hashMap = it.next();
float dx = Float.parseFloat(hashMap.get("x").toString());// 获取到它的初始化X坐标
float dy = Float.parseFloat(hashMap.get("y").toString());// 获取到它的初始化Y坐标
bmpy = (Bitmap) hashMap.get("bmp");// 获取到它的初始化的位图
Log.i("MyView", "bmpClick---> " + dx + ":" + dy);
if (mx >= (dx-bmpy.getWidth()/2)&& mx <= (dx+bmpy.getWidth()/2) 
&& my >= (dy-bmpy.getHeight()/2) && my <= (dy+bmpy.getHeight()/2)) {
return bmpy;
}

}
return null;

}

@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();

switch (event.getAction()) {
// 点击时的(x,y),记录初始位置
case MotionEvent.ACTION_DOWN:
mDragBitmap = bmpClick(x, y);
break;
// 移动时更新(x,y),同时更新图片
case MotionEvent.ACTION_MOVE:
if (mDragBitmap != null) {
if(mDragBitmap.equals(bmp1)){
movex = bmp1.getWidth()/2;
movey = bmp1.getHeight()/2;
mBitmap = bmp1.copy(Bitmap.Config.ARGB_8888, true);
X_r = x-movex;
Y_r = y-movey;
invalidate();
}
else{
movex = bmp2.getWidth()/2;
movey = bmp2.getHeight()/2;
mBitmap = bmp2.copy(Bitmap.Config.ARGB_8888, true);
X_r = x-movex;
Y_r = y-movey;
invalidate();
}
}
break;

// 弹起时更新(x,y),并记录位置
case MotionEvent.ACTION_UP:

if(mDragBitmap != null){
map = new HashMap();
map.put("x", x);
map.put("y", y);
map.put("bmp", mDragBitmap);
list.add(map);
Log.e("bitmap list","insert finish : ["+ x +","+ y +"]");
}
mDragBitmap = null;
break;
}
return true;
}
}

private Bitmap mDragBitmap = null;

}

这是一个图片四处拖动效果的源码
希望对你有用 --------------------编程问答-------------------- 这里你得继承一个view,然后再自定义一个Gallery,然后把Gallery放入view中。选择Gallery中的图片。让该图片在view中绘制。所以这里你就得实时更新界面!这是一种思路!有时间可以去看下这个。这里有一个自定义的Gallery;
http://blog.csdn.net/ch_984326013/article/details/6573774

--------------------编程问答-------------------- 您好,我也遇到了同样的问题,不知道楼主有没有解决,可否提供点方法,谢谢!
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,