Autore Topic: Dragn and Drop and Scale [Problema]  (Letto 39 volte)

Offline Raffyna

  • Utente junior
  • **
  • Post: 103
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
  • Sistema operativo:
    seven
Dragn and Drop and Scale [Problema]
« il: 30 Novembre 2016, 17:32:26 CET »
0
Ciao a tutti,
ho nuovamente bisogno di voi. Sto sviluppando una app che ha 8 ImageView. Queste ImageView devono poter essere spostate  sullo schermo e quando lo tappo l'iv si deve ingrandire ( deve rimanere zoommato anche durante il drag) nel momento in cui lascio il tap l'iv deve ritornare nella sua posizione di partenza e delle dimensioni iniziali. Però se rilascio una IV in una specifica posizione X, definita sullo schermo, l'iv deve restare in quella posizione e con le dimensioni zoommate.

Al momento riesco a fare il drag di tutte le img sullo schermo, riesco a definire la sezione in cui deve essere rilasciata l'iv , se lascio il tap e non sono nella posizione X l'iv torna al suo posto ma non riesco a gestire lo scaling.

Potreste darmi una mano?

Vi posto il mio codice:
MainActivity.java

Codice (Java): [Seleziona]
public class MainActivity extends BaseDetailActivity {
    private AlarmManager alarmManager;
    private Intent notificationIntent;
    private PendingIntent broadcast3d;
    private PendingIntent broadcast6d;
    private PendingIntent broadcast21d;
    private ImageView settings_btn;

    private ImageView[] iv_moods           =  new ImageView[8];
    private TextView[] tv_moods            =  new TextView[8];
    private RelativeLayout[] rl_moods =  new RelativeLayout[8];
    private static final String[] IV_TAG   =  { "Excited","Sad","Happy","Angry","Inspired","Disappointed","Thankful","Confused" };
    private static final int[] resources   =  { R.id.iv_excited,R.id.iv_sad,R.id.iv_happy,R.id.iv_angry,R.id.iv_inspired, R.id.iv_disappointed, R.id.iv_thankfull,R.id.iv_confused };
    private static final int[] staticViews =  { R.id.view_excited,R.id.view_sad,R.id.view,R.id.view_angry,R.id.view_inspired, R.id.view_disappointed, R.id.view_thankfull,R.id.view_confused };
    private static final int[] resources_text_view  =  { R.id.tv_excited,R.id.tv_sad,R.id.tv_happy,R.id.tv_angry,R.id.tv_inspired, R.id.tv_disappointed, R.id.tv_thankful,R.id.tv_confused };
    private static final int[] resources_relative_layout =  { R.id.rl_iv_excited,R.id.rl_iv_sad,R.id.rl_iv_happy,R.id.rl_iv_angry,R.id.rl_iv_inspired, R.id.rl_iv_disappointed, R.id.rl_iv_thankful,R.id.rl_iv_confused };
    private ViewGroup viewRoot;
    private ViewGroup.LayoutParams[] allStartLayoutParams = new ViewGroup.LayoutParams[8];
    private int glovalIndex = 0 ;
    private Animation animationScale;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        animationScale = AnimationUtils.loadAnimation(this,R.anim.animation);
        animationScale.setFillAfter(true);

        alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
        notificationIntent.addCategory("android.intent.category.DEFAULT");
        broadcast3d  = PendingIntent.getBroadcast(this, 103, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        manageUID();
        settings_btn  = (ImageView) findViewById(R.id.iv_settings_main_activity);

        for(int i = 0 ; i < IV_TAG.length; i++) {
            iv_moods[i] = (ImageView)findViewById(resources[i]);
            rl_moods[i] = (RelativeLayout) findViewById(resources_relative_layout[i]);
            tv_moods[i] = (TextView) findViewById(resources_text_view[i]);
            rl_moods[i].setTag(IV_TAG[i]);
            rl_moods[i].setOnTouchListener(new CustonOnTouchListener());
//            rl_moods[i].setOnDragListener(new CustomDragListener());
            tv_moods[i].setVisibility(View.INVISIBLE);
            allStartLayoutParams[i] =  rl_moods[i].getLayoutParams();
        }

        findViewById(R.id.ll_circle_container).setOnDragListener(new CustomDragListener()); // sezione inferiore
        viewRoot = (ViewGroup) findViewById(R.id.rl_home);
        viewRoot.setOnDragListener(new CustomDragListener());
    }


    private final class CustonOnTouchListener implements View.OnTouchListener { //listener sull'image
        @Override
        public boolean onTouch(View view, MotionEvent event) {

            for(int i = 0 ; i < tv_moods.length; i++) {
                if (rl_moods[i] == view) {
                    glovalIndex = i;
                    tv_moods[i].setVisibility(View.VISIBLE);
                }else {
                    tv_moods[i].setVisibility(View.GONE);
                }
            }

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                   
                    ClipData.Item item = new ClipData.Item((CharSequence)view.getTag());
                    String[] mimeTypes = { ClipDescription.MIMETYPE_TEXT_INTENT };
                    ClipData data = new ClipData(view.getTag().toString(), mimeTypes, item);
                    View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);

                    view.startDrag( data, //data to be dragged
                            shadowBuilder, //drag shadow
                            view, //local data about the drag and drop operation
                            0   //no needed flags
                    );

                    allStartLayoutParams[glovalIndex] =  view.getLayoutParams();
                    view.startAnimation(animationScale);
                    backgroundChange(view);
                   // view.setVisibility(View.GONE);

                    view.setOnDragListener(new CustomDragListener());

                    return true;
                default:
                    return false;
            }
        }
    }

    class CustomDragListener implements View.OnDragListener { //listener sulla sezione superiore
        @Override
        public boolean onDrag(View v, DragEvent event)
        {
            switch (event.getAction()) {
                case DragEvent.ACTION_DRAG_STARTED:

                    break;
                case DragEvent.ACTION_DRAG_ENTERED:
                    break;
                case DragEvent.ACTION_DRAG_EXITED:
                    break;
                case DragEvent.ACTION_DROP:

                    // Determines if this View can accept the dragged data
                        if (v == findViewById(R.id.ll_circle_container)) {
                            View view = (View) event.getLocalState();
                            ViewGroup viewgroup = (ViewGroup) view.getParent();
                            viewgroup.removeView(view);
                            RelativeLayout containView = (RelativeLayout) v;
                            containView.addView(view);
                            containView.setGravity(Gravity.CENTER);
                            view.setVisibility(View.VISIBLE);
                            final Handler handler = new Handler();
                            handler.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    startActivity(new Intent(getApplicationContext(), FeedbackActivity.class));
                                    overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_right);
                                }
                            }, 500);
                        } else {
                            View view = (View) event.getLocalState();
                            ViewGroup viewgroup = (ViewGroup) view.getParent();
                            viewgroup.removeView(view);
                            RelativeLayout containView = (RelativeLayout) v; //AL DI FUORI DEL CERCHIO VIENE SEMPRE RIPOSIZIONATO IN ALTO AL CENTRO
                            view.setLayoutParams(allStartLayoutParams[glovalIndex]);
                            containView.addView(view);
                            view.setVisibility(View.VISIBLE);
                        }
                    break;


                case DragEvent.ACTION_DRAG_ENDED:
                    if(v == rl_moods[glovalIndex]) {
                        v.setOnTouchListener(null);
                    }
                    v.clearAnimation();
                    break;
                default:
                    break;
            }
            return true;
        }
    }

ANIMATION.XML
Codice (Java): [Seleziona]
?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

        <scale

                android:fromYScale="1"
                android:fromXScale="1"
                android:toYScale="1.4"
                android:toXScale="1.4"
                duration="600"
                />

</set>

activity_main.xml

Codice (Java): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:typeface_c="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/excited_up"
    android:id="@+id/rl_home"
    android:transitionName="@string/transition_name_main"
    tools:context="it.deloitte.digital.moodapp.ui.MainActivity"
>


    <!-- ingranaggio opzioni -->
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/iv_settings_main_activity"
        android:background="@drawable/settings"
        android:onClick="settingsAction"
        android:adjustViewBounds="true"
        android:cropToPadding="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="9dp"
        android:layout_marginEnd="9dp"
        android:layout_marginTop="7dp" />

    <it.deloitte.digital.utils.CustomTextView
        android:id="@+id/tv_header"
        android:layout_width="wrap_content"
        android:textSize="25sp"
        android:layout_marginTop="40dp"
        typeface_c:OpenSans="light"
        android:text="@string/action_bar_title_home"
        android:textColor="@android:color/white"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" />


    <!-- Punto centrale in cui rilasciare l'iv -->
    <RelativeLayout
        android:layout_below="@id/tv_header"
        android:id="@+id/ll_circle_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:background="@drawable/circle_set_mood"
        android:layout_marginTop="25dp"
        >


    </RelativeLayout>


    <View
        android:id="@+id/view_excited"
        android:layout_width="@dimen/dim_view_container_avg"
        android:layout_height="@dimen/dim_view_container_avg"
        android:layout_alignTop="@+id/view_angry"
        android:layout_alignEnd="@+id/iv_settings_main_activity" />

    <View
        android:id="@+id/view_angry"
        android:layout_width="@dimen/dim_view_container_avg"
        android:layout_height="@dimen/dim_view_container_avg"
        android:layout_above="@+id/view_confused"
        android:layout_toStartOf="@+id/tv_header" />

    <View
        android:id="@+id/view_sad"
        android:layout_width="@dimen/dim_view_container_large"
        android:layout_height="@dimen/dim_view_container_large"
        android:layout_below="@+id/ll_circle_container"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="16dp" />


    <View
        android:id="@+id/view_confused"
        android:layout_width="@dimen/dim_view_container_avg"
        android:layout_height="@dimen/dim_view_container_avg"
        android:layout_toStartOf="@+id/tv_header"
        android:layout_marginTop="16dp" />


    <View
        android:id="@+id/view2"
        android:layout_width="@dimen/dim_view_container_large"
        android:layout_height="@dimen/dim_view_container_large"
        android:layout_marginTop="26dp"
        android:layout_alignTop="@+id/view_sad"
        android:layout_toStartOf="@+id/view_sad" />

    <View
        android:id="@+id/view_inspired"
        android:layout_width="@dimen/dim_view_container_large"
        android:layout_height="@dimen/dim_view_container_large"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/view"
        android:layout_toStartOf="@+id/view2" />

    <View
        android:id="@+id/view_disappointed"
        android:layout_width="@dimen/dim_view_container_min"
        android:layout_height="@dimen/dim_view_container_min"
        android:layout_above="@+id/view_inspired"
        android:layout_alignEnd="@+id/ll_circle_container" />

    <View
        android:layout_width="@dimen/dim_view_container_large"
        android:layout_height="@dimen/dim_view_container_large"
        android:id="@+id/view"
        android:layout_below="@+id/view2"
        android:layout_alignStart="@+id/tv_header" />

    <View
        android:id="@+id/view_thankfull"
        android:layout_width="@dimen/dim_view_container_avg"
        android:layout_height="@dimen/dim_view_container_avg"
        android:layout_alignParentBottom="true"
        android:layout_toEndOf="@+id/view_sad"
        android:layout_marginBottom="10dp" />

    <RelativeLayout
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:id="@+id/rl_iv_excited"
        android:layout_below="@+id/ll_circle_container"
        android:layout_alignEnd="@+id/view"
        android:layout_marginEnd="19dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv_excited"
            android:id="@+id/tv_excited"
            android:textColor="@android:color/white"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            />
        <ImageView
            android:layout_height="@dimen/dim_view_container_min"
            android:background="@drawable/excited"
            android:id="@+id/iv_excited"
            android:layout_centerHorizontal="true"
            android:layout_below="@+id/tv_excited"
            android:layout_width="@dimen/dim_view_container_min"
            />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:id="@+id/rl_iv_disappointed"
        android:layout_below="@+id/view_disappointed"
        android:layout_alignEnd="@+id/view_disappointed">

        <ImageView

            android:layout_width="@dimen/dim_view_container_large"
            android:layout_height="@dimen/dim_view_container_large"
            android:background="@drawable/disappointed"
            android:id="@+id/iv_disappointed"
            android:layout_centerHorizontal="true"
            android:layout_below="@+id/tv_disappointed" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv_disappointed"
            android:id="@+id/tv_disappointed"
            android:textColor="@android:color/white"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"/>

    </RelativeLayout>


    <RelativeLayout
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:id="@+id/rl_iv_happy"
        android:orientation="vertical"
        android:layout_below="@+id/view_sad"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="15dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv_happy"
            android:id="@+id/tv_happy"
            android:textColor="@android:color/white"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"/>

        <ImageView
            android:background="@drawable/happy"
            android:id="@+id/iv_happy"
            android:layout_width="@dimen/dim_view_container_large"
            android:layout_height="@dimen/dim_view_container_large"
            android:layout_below="@+id/tv_happy">
        </ImageView>
    </RelativeLayout>
    <RelativeLayout
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:id="@+id/rl_iv_angry"
        android:layout_alignBottom="@+id/view"
        android:layout_alignParentStart="true">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv_angry"
            android:id="@+id/tv_angry"
            android:textColor="@android:color/white"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            />

        <ImageView
            android:layout_height="@dimen/dim_view_container_avg"
            android:layout_width="@dimen/dim_view_container_avg"
            android:background="@drawable/emoticon_angry"
            android:id="@+id/iv_angry"
            android:layout_below="@+id/tv_angry"
            android:layout_centerHorizontal="true" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:id="@+id/rl_iv_inspired"
        android:layout_below="@+id/ll_circle_container"
        android:layout_alignEnd="@+id/view_excited">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv_inspired"
            android:id="@+id/tv_inspired"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:textColor="@android:color/white"
            />

        <ImageView
            android:layout_width="@dimen/dim_view_container_large"
            android:layout_height="@dimen/dim_view_container_large"
            android:background="@drawable/inspired"
            android:id="@+id/iv_inspired"
            android:layout_below="@+id/tv_inspired"
            android:layout_centerHorizontal="true" />
    </RelativeLayout>


    <RelativeLayout
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:id="@+id/rl_iv_confused"
        android:layout_alignBottom="@+id/view_inspired"
        android:layout_toStartOf="@+id/view_sad">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv_confused"
            android:id="@+id/tv_confused"
            android:textColor="@android:color/white"
            android:gravity="center"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true" />

        <ImageView
            android:layout_height="@dimen/dim_view_container_avg"
            android:layout_width="@dimen/dim_view_container_avg"
            android:background="@drawable/confused"
            android:id="@+id/iv_confused"
            android:layout_below="@+id/tv_confused"
            android:layout_centerHorizontal="true" />

    </RelativeLayout>


    <RelativeLayout
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:gravity="center"
        android:id="@+id/rl_iv_sad"
        android:layout_below="@+id/view_sad"
        android:layout_alignEnd="@+id/view_excited"
        android:layout_marginEnd="11dp">

        <ImageView
            android:layout_width="@dimen/dim_view_container_avg"
            android:background="@drawable/sad"
            android:id="@+id/iv_sad"
            android:layout_centerHorizontal="true"
            android:layout_below="@+id/tv_sad"
            android:layout_height="@dimen/dim_view_container_avg" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv_sad"
            android:textColor="@android:color/white"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:id="@+id/tv_sad" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:id="@+id/rl_iv_thankful"
        android:layout_above="@+id/view_disappointed"
        android:layout_toEndOf="@+id/view">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv_thankful"
            android:id="@+id/tv_thankful"
            android:textColor="@android:color/white"
            android:gravity="center"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"/>

        <ImageView
            android:layout_width="@dimen/dim_view_container_min"
            android:layout_height="@dimen/dim_view_container_min"
            android:background="@drawable/thankful"
            android:id="@+id/iv_thankfull"
            android:layout_below="@+id/tv_thankful"
            android:layout_centerHorizontal="true" />
    </RelativeLayout>

</RelativeLayout>


Vi ringrazio in anticipo per l'aiuto.