Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Передвижение картинки imageview / 6 сообщений из 6, страница 1 из 1
12.08.2015, 14:38
    #39027902
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передвижение картинки imageview
Всем привет.
Пытаюсь написать простенькую программку для передвижения картинки imageview в RelativeLayout.
есть у кого-то готовые скрипты? Нужно понять что делать в action_up и action_move. Всю голову сломал, выходит то дерганое, то не так как нужно двигается.
Может ссылки кто посоветует?
...
Рейтинг: 0 / 0
12.08.2015, 20:10
    #39028149
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передвижение картинки imageview
в ведроиде же есть стандартная или в support library реализация drag/drop
...
Рейтинг: 0 / 0
12.08.2015, 21:04
    #39028169
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передвижение картинки imageview
Мозговой_слизеньМожет ссылки кто посоветует?
Или код?
Мозговой_слизеньВсю голову сломал, выходит то дерганое, то не так как нужно двигается.
...
Рейтинг: 0 / 0
13.08.2015, 12:03
    #39028483
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передвижение картинки imageview
Вот, код я нашел и даже причесал под свои нужды.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
public class MainActivity extends Activity {

    private int _xDelta;
    private int _yDelta;
    ImageView sun_image;
    TextView text;
    TextView text2;
    @Override
    protected void onCreate(Bundle savedInstanceState)

    {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            sun_image = (ImageView)findViewById(R.id.sun);
            text = (TextView) findViewById(R.id.text); // назначаем текст
            text2 = (TextView) findViewById(R.id.text2); // назначаем текст

            sun_image.setOnTouchListener(new View.OnTouchListener() { // листенер

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

                final int X = (int) event.getRawX(); // получаем сырое значеие положения пальца на экране.
                final int Y = (int) event.getRawY();

                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                    case MotionEvent.ACTION_DOWN:

                        _xDelta = (int) (X - sun_image.getTranslationX()); //getTranslation содержит в себе значение отступа картинки от изначального места
                        _yDelta = (int) (Y - sun_image.getTranslationY()); // т.е. получаем разницу между начальной координатой пальца и отступом артинки от начальной точки

                        text.setText("RAW X: " + String.valueOf(X) + " RAW Y: " + String.valueOf(Y) );
                        text2.setText("getTranslationX: " + String.valueOf(sun_image.getTranslationX()) + " getTranslationY: " + String.valueOf(sun_image.getTranslationY()) );
                        break;

                    case MotionEvent.ACTION_POINTER_DOWN:

                        break;

                    case MotionEvent.ACTION_UP:


                        break;

                    case MotionEvent.ACTION_POINTER_UP:

                        break;

                    case MotionEvent.ACTION_MOVE:

                        //if(sun_image.getTranslationX()<300) {
                            sun_image.setTranslationX(X - _xDelta); //Вычли из начального положения пальца разницу (а какую разницу - хз).
                            sun_image.setTranslationY(Y - _yDelta);

                            text.setText("RAW X: " + String.valueOf(X) + " RAW Y: " + String.valueOf(Y));
                            text2.setText("getTranslationX: " + String.valueOf(sun_image.getTranslationX()) + " getTranslationY: " + String.valueOf(sun_image.getTranslationY()));
                       // }
                        break;

                }


                return true;
            }

        });




    }



}




Может мне кто-нибудь просто комменты написать нахрен нужна вот эта операция: _xDelta = (int) (X - sun_image.getTranslationX());
И вот эта: sun_image.setTranslationX(X - _xDelta);

я пытался сам понять как мог, но видимо я слабоумный.

Модератор: Спрятал простыню в спойлер.
...
Рейтинг: 0 / 0
14.08.2015, 09:14
    #39029193
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передвижение картинки imageview
Мозговой_слизеньМожет мне кто-нибудь просто комменты написать нахрен нужна вот эта операция: _xDelta = (int) (X - sun_image.getTranslationX());
И вот эта: sun_image.setTranslationX(X - _xDelta);
Пробовал избавиться от дельты? В down только запомнить начальные позиции и все.
...
Рейтинг: 0 / 0
18.08.2015, 17:43
    #39031846
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передвижение картинки imageview
wadmanМозговой_слизеньМожет мне кто-нибудь просто комменты написать нахрен нужна вот эта операция: _xDelta = (int) (X - sun_image.getTranslationX());
И вот эта: sun_image.setTranslationX(X - _xDelta);
Пробовал избавиться от дельты? В down только запомнить начальные позиции и все.

Не, с дельтой все ок, там без нее никак. Я доработал код, путем страшных моральных мучений на выходных. В итоге получился рабочий код для передвижения картинки, без "дерганья" при поднятии первго пальца при опущенном втором. Такого кода я даже в com зоне не нашел.

Прикол этого скрипта в том, что он реально не глючный и рабочий. Для передвижения картинки подойдет. Но событие, что делать с картинкой после отпускания пальца - еще не придумано.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
import android.app.Activity;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity {

    TextView text;
    TextView text2;
    TextView text3;
    TextView text4;
    TextView text5;

    ImageView image;
    float image_x_pos;
    float image_y_pos;

    float razn_x_pos;
    float razn_y_pos;

    float x=0,y=0;

    int fingerid;
    TextView text6;
    @Override

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        image = (ImageView)findViewById(R.id.image);
        text = (TextView)findViewById(R.id.text);
        text2 = (TextView)findViewById(R.id.text2);
        text3 = (TextView)findViewById(R.id.text3);
        text4 = (TextView)findViewById(R.id.text4);
        text5 = (TextView)findViewById(R.id.text5);

        RelativeLayout layout = (RelativeLayout)findViewById(R.id.lay);

        layout.setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {

                int actionMask = event.getActionMasked();// событие
                int pointerIndex = event.getActionIndex();// индекс касания
                int pointerCount = event.getPointerCount();// число касаний

                switch(actionMask) {

                    case MotionEvent.ACTION_DOWN :
                    {


                        x = event.getX();
                        y = event.getY();

                        image_x_pos=image.getX();
                        image_y_pos=image.getY();

                        razn_x_pos= x-image_x_pos;
                        razn_y_pos= y-image_y_pos;
                        text.setText("ACTION_DOWN X: "+String.valueOf(x)+ " Y: "+ String.valueOf(y));
                        text2.setText("ACTION_DOWN Image X: "+String.valueOf(image_x_pos)+ " Image Y: "+ String.valueOf(image_y_pos));
                        text3.setText("ACTION_DOWN разн X: "+String.valueOf(razn_x_pos)+ " разн Y: "+ String.valueOf(razn_y_pos));
                        text5.setText("ACTION_DOWN Число опущенных пальцев: "+String.valueOf(pointerCount));

                    }
                    break;

                    case MotionEvent.ACTION_POINTER_DOWN :
                    {
                        text5.setText("ACTION_POINTER_DOWN Число опущенных пальцев: "+String.valueOf(pointerCount));
                    }
                    break;


                    case MotionEvent.ACTION_MOVE :
                    {

                        for (int i = 0; i < pointerCount; i++)
                        {
                            if (i == 0)
                            {

                                fingerid = event.getPointerId(i);

                                if (fingerid == 0) // а вот тут условие, что реагируем только на первый палец
                                {

                                    text6 = (TextView) findViewById(R.id.text6);

                                    image.setX(event.getX(0) - razn_x_pos);
                                    image.setY(event.getY(0) - razn_y_pos);
                                    text4.setText("ACTION_MOVE Image X: " + String.valueOf(event.getX(0) - razn_x_pos) + " Image Y: " + String.valueOf(event.getY(0) - razn_x_pos));
                                    text6.setText("ACTION_MOVE X: " + String.valueOf(event.getX(i)) + " ID пальца: " + String.valueOf(event.getPointerId(i)));

                                }

                            }


                        }
                    }
                    break;
                    case MotionEvent.ACTION_UP :
                    {
                        //Toast.makeText(getApplicationContext(), "ACTION_UP", Toast.LENGTH_SHORT).show();
                    }
                    break;

                    case MotionEvent.ACTION_POINTER_UP :
                    {

                        //Toast.makeText(getApplicationContext(), String.valueOf(upPI), Toast.LENGTH_SHORT).show();
                    }
                    break;

                }


                return  true;

            }
        });


    }


}

...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / Передвижение картинки imageview / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]