2012-08-10 10 views
6

मैं एक मॉड्यूल बना रहा हूं जिसमें मेरे पास दो छवियां हों जब भी मैं एक छवि को छूता हूं, इसे ड्रैग पर उंगली या माउस (एमुलेटर में) का पालन करना चाहिए और यदि यह दूसरी छवि पर आता है तो वे अपनी स्थिति बदलते हैं जहां वे अपनी स्थिति बदलते हैं पहली छवि पहले स्पर्श पर थी (ACTION_DOWN)। मैंने निम्नलिखित कोड लिखा है जिसमें विचार चल रहे हैं लेकिन जब मैं पहली छवि खींचता हूं तो दूसरा भी खींचा जाता है। आगे पदों को बदलने के तरीके पर विचार करना चाहते हैं।दो छवि खींचें

.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/vg" 
    > 

<ImageView 
    android:id="@+id/img" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
     /> 
<ImageView 
    android:id="@+id/img1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 
</LinearLayout> 

गतिविधि फ़ाइल

public class MainActivity extends Activity { 
    private View selected_item = null; 
    private int offset_x = 0; 
    private int offset_y = 0; 
    Canvas can; 
    Paint paint; 
    ImageView img; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ViewGroup vg = (ViewGroup)findViewById(R.id.vg); 
    vg.setOnTouchListener(new View.OnTouchListener() { 

        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
          switch(event.getActionMasked()) 
          { 

            case MotionEvent.ACTION_MOVE: 
             if(selected_item == img) { 
              int x = (int)event.getX() - offset_x; 
              int y = (int)event.getY() - offset_y; 

        int w = getWindowManager().getDefaultDisplay().getWidth() - 100; 
        int h = getWindowManager().getDefaultDisplay().getHeight() - 100; 
        if(x > w) 
         x = w; 
        if(y > h) 
         y = h; 
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            new ViewGroup.MarginLayoutParams(
                100, 
                100)); 
            lp.setMargins(x, y, 0, 0); 

              selected_item.setLayoutParams(lp); 
             } 
              break; 
            default: 
              break; 
          } 
          return true; 
        } 
    }); 
    img = (ImageView)findViewById(R.id.img); 

    //timerDelayRemoveView(500, img); 

    BitmapDrawable drawable = (BitmapDrawable)getResources().getDrawable(R.drawable.imagesl_02); 
    Bitmap bitmap = drawable.getBitmap(); 
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, true); 
    img.setImageBitmap(scaledBitmap); 
    LinearLayout.LayoutParams lp0 = new LinearLayout.LayoutParams(100, 100); 
    lp0.leftMargin = 0; 
    lp0.topMargin = 0; 
    img.setLayoutParams(lp0); 
    //vg.addView(img, lp1); 
    // vg.addView(img, 1); 
    img.setOnTouchListener(new View.OnTouchListener() { 

        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
          switch(event.getActionMasked()) 
          { 
            case MotionEvent.ACTION_DOWN: 
              offset_x = (int)event.getX(); 
              offset_y = (int)event.getY(); 
              selected_item = v; 
          Toast.makeText(MainActivity.this, "down",Toast.LENGTH_SHORT).show(); 
              break; 

          default: break;   
          } 

          return false; 
        } 
      }); 

    ImageView img1 = (ImageView)findViewById(R.id.img1); 
    BitmapDrawable drawable1 = (BitmapDrawable)getResources().getDrawable(R.drawable.realimage); 
    Bitmap bitmap1 = drawable1.getBitmap(); 
    Bitmap scaledBitmap1 = Bitmap.createScaledBitmap(bitmap1, 100, 100, true); 
    img1.setImageBitmap(scaledBitmap1); 
    LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(100, 100); 
    lp1.leftMargin = 100; 
    lp1.topMargin = 100; 
    img1.setLayoutParams(lp1); 

    //img.setImageBitmap(scaledBitmap1); 

    img1.setOnTouchListener(new View.OnTouchListener() { 

        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
          switch(event.getActionMasked()) 
          { 
            case MotionEvent.ACTION_DOWN: 
              // offset_x = (int)event.getX(); 
              // offset_y = (int)event.getY(); 
              selected_item = v; 
              break; 
            default: 
              break; 
          } 

          return false; 
        } 
      }); 

} 
    } 
+0

आप किस रिलीज को लक्षित कर रहे हैं? एंड्रॉइड में एक ड्रैगिंग एपीआई है जो हनीकॉम – JRaymond

उत्तर

2

दूसरी छवि खींचा जा रहा है क्योंकि आपके पास लाइनरलाउट में दो हैं। दूसरी छवि के लेआउट पैरामीटर पहले पर निर्भर हैं, जिसका अर्थ है कि जैसे ही आप उन्हें दाईं ओर समायोजित करते हैं, दूसरी छवि पहले के दाएं किनारे पर बाध्य होती है।

अगर मैं इस समस्या का सामना कर रहा था (मान लीजिए कि मैं हनीकॉम में पेश की गई ड्रैगिंग एपीआई का उपयोग नहीं कर सका), तो मैं पहले सब कुछ RelativeLayout में 2 ImageView एस के साथ रखूंगा। जब आप छवियों में से एक को उठाते हैं, तो आप इसके लेआउट पैरामीटर को एडजस्ट करते समय समायोजित करते हैं, और फिर जब आप इसे छोड़ते हैं तो आप अपने वांछित लेआउट को पूरा करने के लिए LayoutParams दोनों समायोजित करते हैं।

1

findViewById(R.drawable.realimage)findViewById(R.id.realimage) होना चाहिए।

मुझे लगता है कि आपको drawable के बजाय id का उपयोग करना चाहिए।

+0

है क्योंकि इसकी त्रुटि ... यह छवि/res/drawable – karan421

+2

है, तो आपको इस ड्रायबल ड्रॉबल = getResources() जैसे कुछ का उपयोग करना चाहिए। getDrawable (R.drawable.id); – Braj

संबंधित मुद्दे