Scalified/viewmover

how to make this thing work?

Closed this issue · 7 comments

ViewMover mover = ViewMoverFactory.createInstance(movable1);
        MovingParams params = new MovingParams(getContext(), 100.0f, 100.0f);
        mover.move(params);

where movable1 is my TextView.
Nothing happens, except strange logging info...
Can you provide some more examples?

Hi lectricas

Your code block for moving the view looks OK

However there are many cases, which may cause your app to behave not as you may expect

Could you please post here the code of layout instantiation and the code where you call the provided code block?

Yep. I'm doing it with butterknife. Is it now allowed?

View root = inflater.inflate(R.layout.fragment_level_three, container, false); //where fragment_level_three is a FrameLayout
ButterKnife.bind(this, root);

It should work

What is the target API?

Post please the code block of how and where do you call the moving of the TextView

package com.pythonanywhere.example.logosanimals.view.level;

import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.pythonanywhere.polusov.logosanimals.R;
import com.pythonanywhere.polusov.logosanimals.util.Tools;
import com.pythonanywhere.polusov.logosanimals.view.BaseLevelFragment;
import com.software.shell.viewmover.configuration.MovingParams;
import com.software.shell.viewmover.movers.ViewMover;
import com.software.shell.viewmover.movers.ViewMoverFactory;

import java.util.Random;

import butterknife.Bind;
import butterknife.ButterKnife;


public class LevelThreeFragment extends BaseLevelFragment {

    @Bind(R.id.movable1)
    TextView movable1;
    @Bind(R.id.frame_for)
    FrameLayout frameFor;

    public static final int LEVEL = 3;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_level_three, container, false);
        ButterKnife.bind(this, root);

        Display display = getActivity().getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        Log.d("MyFragment", "size.x:" + size.x);

        Random random = new Random();
        for (int i = 0; i < 3; i++) {
            TextView textView = new TextView(getActivity());
            textView.setX(random.nextInt(size.x - 100));
            textView.setY(random.nextInt(size.y - 100));
            textView.setText(i+"dsf");
            frameFor.addView(textView);
        }

        ViewMover mover = ViewMoverFactory.createInstance(movable1);
        MovingParams params = new MovingParams(getContext(), 100.0f, 100.0f);
        mover.move(params);

//        movable1.setOnTouchListener(new View.OnTouchListener() {
//            @Override
//            public boolean onTouch(View view, MotionEvent event) {
//
//                FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
//                if (view.getId() != R.id.movable1) return false;
//
//                Log.d("MyFragment", event.getAction() + "event.getRawX():" + event.getRawX() + "Y" + event.getRawY());
//
//                switch (event.getAction()) {
//                    case MotionEvent.ACTION_MOVE:
//                        params.topMargin = (int) event.getRawY() - view.getHeight();
//                        params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);
//                        view.setLayoutParams(params);
//                        break;
//
////                    case MotionEvent.ACTION_UP:
////                        params.topMargin = (int) event.getRawY() - view.getHeight();
////                        params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);
////                        view.setLayoutParams(params);
////                        break;
////
//                    case MotionEvent.ACTION_DOWN:
//                        view.setLayoutParams(params);
//                        break;
//                }
//
//                return true;
//            }
//        });

        return root;
    }


    public static LevelThreeFragment newInstance() {
        return new LevelThreeFragment();
    }


    @Override
    public void onDestroyView() {
        super.onDestroyView();
        ButterKnife.unbind(this);
    }
}

you can just make a sample main activity to demonstrate how it should be done

At first look I may assume that moving works, however when you launch the app you see only the result of the movement, but not the moving process. This happens because the moving code block is executed before the fragment is shown

The goal of moving indeed is that it should be performed on a certain action when your UI is responsive, e.g. you may create a button and assign a moving process to its onClick event

Please try it with button firstly
Also there is a fragment and its unclear now how it is instantiated, so I would also suggest you to try movement from a simple Activity with FrameLayout

Please let me know if this helps