2011-12-30 16 views
5

मैंने अपने आवेदन में संसाधनों से छवियों को यादृच्छिक रूप से पंक्तियों और स्तंभों के रूप में प्रदर्शित किया है। उन पंक्तियों और स्तंभों से मैं दो छवियों को स्वैप करना चाहता हूं, जब उपयोगकर्ता केवल छवियों के बगल में क्लिक करें। निम्नलिखित कोड छवियों को पंक्तियों और स्तंभों में यादृच्छिक रूप से प्रदर्शित करेगा।एंड्रॉइड में कैनवास पर छवियों को स्वैप कैसे करें?

private void rand(int imagesList[][]) 
{ 
    Random generator = new Random(); 
    int temp; 
    for (int i = 0; i < MAX_ROWS; i++) 
     for(int j = 0; j < MAX_COLS; j++) 
     { 
      int randRowPos = generator.nextInt(MAX_ROWS); 
      int randColPos = generator.nextInt(MAX_COLS); 
      temp = imagesList[i][j]; 
      imagesList[i][j] = imagesList[randRowPos][randColPos]; 
      imagesList[randRowPos][randColPos]= temp; 
     } 
} 

उपरोक्त कोड का उपयोग करके मैंने छवियों को पंक्तियों और स्तंभों के रूप में प्रदर्शित किया है।

यहां मैं पंक्तियों और स्तंभों से छवियों के बगल में दो कैसे स्वैप कर सकता हूं?

कृपया किसी भी शरीर मेरी मदद .....

उत्तर

2

मैं टिप्पणी जोड़ने के लिए विशेषाधिकार नहीं है, तो मैं जवाब के रूप में इस पोस्टिंग कर रहा हूँ। छवियों के बगल में आपका क्या मतलब है? क्या यह उपयोगकर्ता एक छवि पर क्लिक करेगा, इसे इसके आगे की छवि के साथ बदल दिया जाना चाहिए? क्या आप वह कोड भी साझा कर सकते हैं जहां आपने इन छवियों को देखने के लिए पिन किया है या कोई एडाप्टरव्यू देखा है?

संपादित करें:

मैं भी कई बार ऐसी ही स्थिति थी जब पूर्ण लेआउट जीवित थे। इस प्रकार मैं क्या किया था है:

कक्षा:

public class PlayScreen extends Activity implements OnTouchListener 

    private Panel mainPanel; // Panel for out display 
    boolean firstClick = false; 

OnCreate:

main = new Panel(this); 
// Display the panel (calls the ondraw and updates the display) 
setContentView(main,new ViewGroup.LayoutParams(screenwidth,screenheight)); 
// Listen for touchevents on the panel 
main.setOnTouchListener(this); 

पैनल:

class Panel extends View 
    { 
     /* 
     * Init a Panel to draw on and a paint to paint with 
     */ 
     Paint mBitmapPaint; 
     public Panel(Context context) 
     { 
      super(context); 
      mBitmapPaint = new Paint(); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) 
     { 
     drawImages(canvas); 
     } 
    } 

drawImages:

private void drawImages(Canvas canvas) 
{ 

     for(int i = 0; i<MAX_ROWS; i++){ 
      for(int j=0; j<MAX_COLS; j++) 
      { 
     int xpos = j*bmp.getWidth()+j*2; 
     int ypos = i*bmp.getHeight()+i*2; 
      bmp = BitmapFactory.decodeResource(mContext.getResources(), items[i][j],opts); 
       canvas.drawBitmap(bmp,xpos,ypos,mBitmapPaint); 
     clickzonex.add(xpos); 
     clickzoney.add(ypos); 
     clickzonei.add(i); 
     clickZonej.add(j); 

      } 
     } 

} 

OnTouch:

onTouch(View v, MotionEvent event) : 

if (event.getAction() == MotionEvent.ACTION_DOWN) 
{ 
// imply logic 
x = (int) event.getX(); 
y = (int) event.getY(); 

    for(int i = 0; i < clickzonex.size();i++) 
    { 
    if((x>clickzonex[i]) && (x<(clickzonex[i]+ bmp.getwidth())) && (y>(clickzoney[i])) && (y<(clickzoney[i]+bmp.getHeight()))) 
    { 
    // we have a click in a zone so we get the card-number in that zone 
    if(firstClick == false) 
    { 
    itemAti=clickzonei[i]; 
    itemAtj = clickzonej[i]; 
    firstclick = false; 
    } 
    else 
    { 
    FirstItemToSwap = items[clickzonei[i]][clickzonej[i]]; 
    SecondItemToSwap = items[itemAti][itemAtj]; 

    // Now do the swaping using any algo you like. 

    main.postInvalidate(); 
    firstclick = true; 
    } 
    break; 
    } 
    } 
return true; 
} 
else 
{ 
return false; 
} 

मैं बस अपना खुद का उदाहरण का उपयोग करें और अपने कोड के साथ मिश्रण आप तर्क को दिखाने के लिए कोशिश की है। मुख्य बिंदु यह है कि ऑनड्रा विधि में केवल ड्रैंकवस को कॉल करें और स्पर्श पर आइटम को स्वैप करें [] [] और पैनल क्लास के पोस्टिनवालिडेट विधि को कॉल करें।

+0

http://stackoverflow.com/questions/8708324/how-to-swap-the-bitmap-images-on-view-in-android –

+0

कृपया ऊपर के लिंक मैं कोड कार्यान्वयन दे दिया है के माध्यम से जाना। –

0

यह सुनिश्चित नहीं है कि आप वास्तव में यहां क्या पूछ रहे हैं, इसलिए कृपया प्रश्न को स्पष्ट करने का प्रयास करें।

एक दृष्टिकोण एक व्यूएबल छवि दृश्यों के लिए एक माता-पिता के रूप में एक व्यूएनिमीटर का उपयोग करने के लिए किया जा सकता है।

<ViewAnimator 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/slideshow_animator" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

फिर एक बार आप घटना है कि स्वैप उत्प्रेरित करने चाहिए पर कब्जा, आप ViewAnimator (अपने मामले imageView में) देखें स्वैप करने के लिए उपयोग कर सकते हैं इसे इस्तेमाल करता है। आप आसानी से एनीमेशन प्रभाव http://developer.android.com/reference/android/widget/ViewAnimator.html

1

मुझे आसानी से ऐसा कुछ करना पड़ सकता था। मैंने सरणी में छवि संदर्भों को अभी बदल दिया और पूरी चीज पर एक रेड्रो (invalidate()) किया।

void swap(int x1, int y1, int x2, int y2) { 
    // swap items[x1][y1] and items[x2][y2] 
    ........ 
    invalidate(); 
} 
संबंधित मुद्दे