יצירת ממשק drag&drop באפליקציה.

פורום ריכוז המדריכים למפתחים חדשים או מנוסים.

מנהל: מנהלי פורומים

יצירת ממשק drag&drop באפליקציה.

הודעהעל ידי royiby ב א', 25 אפריל 2010, 10:08

זה התחיל כשביקשו ממני לפתח ממשק drag&drop באפליקציה עבור לקוח.
מכיוון שלא עשיתי זאת בעבר חיפשתי ברשת מישהו שעשה זאת בעבר ו....חושך.
היו המון מימושים ליצירת ממשק שכזה ב-surfaceView כאשר האובייקטים בממשק הינן צלמיות מסוג bitmap ותו לא (מימוש שלדעתי הצנועה הוא לא מימוש ממש טוב בלשון המעטה).
יתרה מכך - בסוף כל עמוד מימוש שכזה היו מספר תגובות של אנשים שמחפשים את דרך המימוש המלאה (בדיוק את מה שאני חיפשתי) של ממשק בו האובייקטים הינם Views מלאים מן המניין, לכן החלטתי שלא רק שאממש בדרכי שלי ולא אנסה לאנוס את המימוש הנפוץ אלא אפרסם את הפתרון שלי כדי שעוד מפתחים אחרי לא ירגישו את התסכול הנדיר של חיפוש מימוש מסויים ולא למצאו (דיי הפעם הראשונה שזה קרה לי).

ולכן:

קוד: בחר הכל
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.Toast;
import android.widget.FrameLayout.LayoutParams;

public class dnd extends Activity
{
   public FrameLayout board;
   public View pawn;
   
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
       
        board = new FrameLayout(this);
        pawn = new View(this);
       
        setContentView(R.layout.main);
       
        board = (FrameLayout)findViewById(R.id.Board);
        pawn = findViewById(R.id.Pawn);
        pawn.setOnTouchListener(dragt);
       
       
    }//onCreate
   
    OnTouchListener dragt = new OnTouchListener()
    {
      @Override
      public boolean onTouch(View v, MotionEvent event)
      {
         FrameLayout.LayoutParams par = (LayoutParams) v.getLayoutParams();
         switch(v.getId())
         {//What is being touched
            case R.id.Pawn:
            {//Which action is being taken
               switch(event.getAction())
               {
                  case MotionEvent.ACTION_MOVE:
                  {
                     par.topMargin = (int)event.getRawY() - (v.getHeight());
                          par.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
                     v.setLayoutParams(par);
                     break;
                  }//inner case MOVE
                  case MotionEvent.ACTION_UP:
                  {
                     par.height = 40;
                     par.width = 40;
                     par.topMargin = (int)event.getRawY() - (v.getHeight());
                          par.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
                     v.setLayoutParams(par);
                     break;
                  }//inner case UP
                  case MotionEvent.ACTION_DOWN:
                  {
                     par.height = 60;
                     par.width = 60;
                     v.setLayoutParams(par);
                     break;
                  }//inner case UP
               }//inner switch
               break;
            }//case pawn
         }//switch
         return true;
      }//onTouch
    };//dragt


קוד: בחר הכל
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/Board" android:layout_gravity="top">

      <View android:background="@drawable/icon"
       android:layout_height="40dp"
       android:layout_width="40dp"
       android:id="@+id/Pawn" android:layout_gravity="top">
      </View>
</FrameLayout>



חוץ מכאן פרסמתי במקביל פוסט דומה באנגלית:
http://www.anddev.org/viewtopic.php?p=41611#41611

מקווה שעזרתי למישהו אי-שם,בהצלחה.

.search tags: Views,Android,android, UI, GUI, drag, and, drop, developing
 
רועי בן יוסף Royi benyossef
מפתח אנדרואיד Android dev
מוביל טכני אנדרואיד - חברת וידמיינד
Android tech leader at vidmind
http://vidmind.com
סמל אישי של המשתמש
royiby
 
הודעות: 488
הצטרף: א', 25 אפריל 2010, 09:59
מיקום: נ"צ-ראשל"צ

מכשיר: Nexus One
גירסא: 2.3

Re: יצירת ממשק drag&drop באפליקציה.

הודעהעל ידי amirseg ב א', 25 אפריל 2010, 13:24

תודה רבה רבה!!!
למרות שאני לא זקוק לזה כרגע אני בטוח שזה יעזור יום אחד :)
amirseg
 
הודעות: 208
הצטרף: ג', 24 נובמבר 2009, 21:56

מכשיר: Motorola Atrix
גירסא: 2.3

Re: יצירת ממשק drag&drop באפליקציה.

הודעהעל ידי royiby ב ב', 26 אפריל 2010, 06:51

אין שום בעיה,הגיע הזמן שאני אתחיל לתרום לקהילה חזרה ;)
רועי בן יוסף Royi benyossef
מפתח אנדרואיד Android dev
מוביל טכני אנדרואיד - חברת וידמיינד
Android tech leader at vidmind
http://vidmind.com
סמל אישי של המשתמש
royiby
 
הודעות: 488
הצטרף: א', 25 אפריל 2010, 09:59
מיקום: נ"צ-ראשל"צ

מכשיר: Nexus One
גירסא: 2.3

Re: יצירת ממשק drag&drop באפליקציה.

הודעהעל ידי liorry ב ד', 23 פברואר 2011, 11:32

מדריך מצויין!
תודה
liorry
 
הודעות: 181
הצטרף: ש', 18 יולי 2009, 14:15

מכשיר: Nexus S
גירסא: 4.0


חזור אל ריכוז מדריכי פיתוח