2013-02-02 155 views
0

基本上,我想实现拖动&拖放功能..添加多个图像视图编程

我想要是我在屏幕上提供图像序列,如果我在images提供任何图像上单击行将被添加到Mains screen。但我遇到问题,当我添加新的视图到Main Screen那么所有其他views也移动到左上角。

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

我使用Framelayout,让我也能达到重叠图像...

enter image description here

这是类中的所有代码工作:

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

}

这里是XML:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/vg" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@android:color/white" > 

<ImageView 
    android:id="@+id/img1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:src="@drawable/ic_launcher" /> 

<Button 
    android:id="@+id/btn1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" /> 

<Button 
    android:id="@+id/btn2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom" /> 

</FrameLayout> 
+0

请将代码添加到您添加视图的位置。否则,我们该如何猜测? – Simon

+0

请发布相关代码。 – anthropomo

+0

我已更新我的问题,通过添加代码... – Arsalan

回答

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

感谢您的回应,我已经尝试过您的解决方案,但它没有't work ... – Arsalan

+1

也许你在编程中最无用的东西是“它没有用”。 – Simon

0

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

@Override 
    public void onClick(View v) 
    { 
} 

将工作。