以编程方式添加多个图像视图

时间:2013-02-02 18:10:21

标签: android android-layout

我基本上试图实现拖放功能..

我正在尝试的是,如果我点击将添加到images的{​​{1}}行中的任何可用图像,我会在屏幕上提供一系列图像。但是我遇到的问题是当我向Mains screen添加新视图时,所有其他Main Screen也会移到左上角。

你能告诉我这是什么问题吗?或者请建议我一个教程或链接,我可以找到解决方案......或者如何实现这个目标?

我正在使用views,所以我也实现了图像重叠......

enter image description here

这是所有代码都在运行的类:

Framelayout

}

这是XML:

public class drag extends Activity implements OnClickListener, OnTouchListener
{
ImageView img1;
Button btn,btn2;
FrameLayout layout;
LayoutParams params;
ImageView im , im2, im3 ,im4;
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    layout = (FrameLayout) findViewById(R.id.vg);
    layout.setDrawingCacheEnabled(true);
    im  = (ImageView)findViewById(R.id.img1);
    im.setDrawingCacheEnabled(true);
    im.setOnTouchListener(this);
    im.setOnClickListener(this);

    btn  = (Button)findViewById(R.id.btn1);
    btn.setDrawingCacheEnabled(true);
    btn.setOnClickListener(this);
    btn.setOnTouchListener(this);

    btn2  = (Button)findViewById(R.id.btn2);
    btn2.setDrawingCacheEnabled(true);
    btn2.setOnClickListener(this);
    btn2.setOnTouchListener(this);

    params = new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT);

    btn.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v) 
        {
            im2 = new ImageView(drag.this);
            Bitmap bm  = BitmapFactory.decodeResource(getResources(), R.drawable.image);
            im2.setImageBitmap(bm);
            im2.setOnTouchListener(drag.this);
            im2.setOnClickListener(drag.this);
            layout.addView(im2, params);

        }
    });

    btn2.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v) 
        {
            Bitmap bm  = BitmapFactory.decodeResource(getResources(), R.drawable.image);                
            saveImage(bm);

        }
    });
}

public  void saveImage(Bitmap myBitmap) 
{
    MediaStore.Images.Media.insertImage(getContentResolver(), myBitmap, "mmsImage" , "mmsimage");       
}

int l, t, r, b;
int oldLeft, oldTop;
PointF p, curr;

@Override
public boolean onTouch(View view, MotionEvent me) 
{

    if (me.getAction() == MotionEvent.ACTION_DOWN) 
    {           
        //status = START_DRAGGING;
        Log.i("status"," AAA dOWN");
        img1 = new ImageView(this);
        view.setDrawingCacheEnabled(true);
        Bitmap mmsImage = Bitmap.createBitmap(view.getDrawingCache());

        img1.setImageBitmap(mmsImage);
        img1.setOnTouchListener(drag.this);
        img1.setOnClickListener(drag.this);

        oldLeft = (int)view.getLeft();
        oldTop = (int)view.getTop();

        p = new PointF(me.getRawX(), me.getRawY());


    }
    if (me.getAction() == MotionEvent.ACTION_MOVE) 
    {
        Log.i("status"," AAA draging");

        int xDiff = (int)(me.getRawX() - p.x);
        int yDiff  = (int)(me.getRawY() - p.y);

        p.x = me.getRawX();
        p.y = me.getRawY();

        l = view.getLeft();
        t = view.getTop();
        r = view.getRight();
        b = view.getBottom();

        view.layout(l + xDiff, t + yDiff , r + xDiff, b + yDiff);

    }
    if (me.getAction() == MotionEvent.ACTION_UP) 
    {
        Log.i("status"," AAA UP");
        //captureUserMove(view);
    } 

    return false;
}

2 个答案:

答案 0 :(得分:2)

您设置了params,但未指定如何定位添加的视图。试试这个:

onCreate()

params = new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT);

params.gravity = Gravity.LEFT | Gravity.TOP; // you need this for margins to work

在点击监听器中:

// your x and y where you want the new view    
params.leftMargin = x;
params.topMargin = y;

答案 1 :(得分:0)

params = new LayoutParams(LayoutParams.WRAP_CONTENT,
  LayoutParams.WRAP_CONTENT);

@Override
    public void onClick(View v) 
    {
}

会奏效。