Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
#1

Движение ImageView. Объект возвращается на исходную позицию - Программирование Android

10.03.2014, 18:04. Просмотров 935. Ответов 6
Метки нет (Все метки)

Здравствуйте! Пытаюсь двигать 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
76
77
78
79
80
81
82
83
package com.example.game;
 
import android.os.Bundle;
import android.app.Activity;
import android.content.ClipData;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
 
public class GameActivity extends Activity {
    
    ImageView im1, im2, im3;
    MotionEvent motionEvent;
    int x1, y1;
    String sDown, sMove, sUp;
    TextView tv;
    boolean im1go = true;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        im1 = (ImageView) findViewById(R.id.imageView2);
        im2 = (ImageView) findViewById(R.id.imageView3);
        im3 = (ImageView) findViewById(R.id.imageView4);
        tv  = (TextView)  findViewById(R.id.textView1);
        
        im1.setOnClickListener(new View.OnClickListener() {
               //@Override
               public void onClick(View v) {
                  Log.v("Game", " click1");         
               }        
        });
        
        im1.setOnTouchListener(new View.OnTouchListener() {
            
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: // нажатие
                  sDown = "Down: " + x1 + "," + y1;
                  sMove = ""; sUp = "";
                  break;
                case MotionEvent.ACTION_MOVE: // движение
                  x1 = (int) event.getX();
                  y1 = (int) event.getY();
                  sMove = "Move: " + x1 + "," + y1;
                  if (im1go)
                  {
                      im1.setX(x1);
                      im1.setY(y1);
                  } 
                  break;
                case MotionEvent.ACTION_UP: // отпускание
                  if (x1 >= 320 && x1 <= 330 && y1 >= 595 && y1 <= 605)
                  {
                    im1go = false;
                  }
                  break;
                case MotionEvent.ACTION_CANCEL:  
                  sMove = "";
                  sUp = "Up: " + x1 + "," + y1;
                  break;
                }
                tv.setText(sDown + "\n" + sMove + "\n" + sUp);
                return true;
            }
        });
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.game, menu);
        return true;
    }
 
}
Вот xml кому нужно:
XML
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
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".GameActivity" >
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/pedmet87_cr" />
 
    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/imageView1"
        android:layout_below="@+id/imageView1"
        android:layout_marginRight="90dp"
        android:layout_marginTop="24dp"
        android:src="@drawable/pedmet87_cr4" 
        android:clickable="true"/>
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/imageView1"
        android:layout_marginTop="23dp"
        android:layout_toRightOf="@+id/imageView4"
        android:text="TextView" />
 
    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_alignLeft="@+id/imageView1"
        android:layout_marginBottom="24dp"
        android:clickable="true"
        android:src="@drawable/pedmet87_cr3" />
 
    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageView1"
        android:layout_alignTop="@+id/textView1"
        android:clickable="true"
        android:src="@drawable/pedmet87_cr2" />
 
</RelativeLayout>
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 18:04     Движение ImageView. Объект возвращается на исходную позицию
Посмотрите здесь:
Android Взаимодействие с ImageView
Координаты imageView Android
ImageView вращение Android
Использование ImageView Android
Массив из ImageView Android
На счет ImageView Android
Координаты ImageView Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
verylazy
Заблокирован
10.03.2014, 18:27     Движение ImageView. Объект возвращается на исходную позицию #2
а где сами строки, в которых задаются координаты view при движении?
я что-то не нашел их
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
10.03.2014, 19:00  [ТС]     Движение ImageView. Объект возвращается на исходную позицию #3
Java
1
2
3
4
5
6
7
8
9
10
case MotionEvent.ACTION_MOVE: // движение
                  x1 = (int) event.getX();
                  y1 = (int) event.getY();
                  sMove = "Move: " + x1 + "," + y1;
                  if (im1go)
                  {
                      im1.setX(x1);
                      im1.setY(y1);
                  } 
                  break;
verylazy
Заблокирован
10.03.2014, 19:26     Движение ImageView. Объект возвращается на исходную позицию #4
по идее координаты надо задавать не через setX() setY(), а немного иначе:
где-то в начале метода onTouch() считываем параметры разметки
Java
1
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) myView.getLayoutParams();
потом можно задавать отступы
Java
1
2
3
case MotionEvent.ACTION_MOVE: 
lp.leftMargin = ...
lp.topMargin = ...
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
10.03.2014, 19:33  [ТС]     Движение ImageView. Объект возвращается на исходную позицию #5
Если я правильно понимаю то вот этот код аналогичен Вашему:
Java
1
2
3
4
5
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( 
                        RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
                     
                    layoutParams.setMargins(150, 150, 0, 0);
                im1.setLayoutParams(layoutParams);
Я пробовал использовать отступы Margins ранее, не помогло...
verylazy
Заблокирован
10.03.2014, 20:14     Движение ImageView. Объект возвращается на исходную позицию #6
в xml я нашел такие строки, и работает ведь отступ
Java
1
2
android:layout_marginRight="90dp"
android:layout_marginTop="24dp"
а чуть выше, imageView1 там центрирование
Java
1
2
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
может в этом причина?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2014, 20:27     Движение ImageView. Объект возвращается на исходную позицию
Еще ссылки по теме:
Баг с imageView Android
Android Таблица из ImageView
Android Прокручивание ImageView
Android Квадратный ImageView
Сохранить ImageView Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
10.03.2014, 20:27  [ТС]     Движение ImageView. Объект возвращается на исходную позицию #7
Цитата Сообщение от verylazy Посмотреть сообщение
может в этом причина?
ImageView1 это основная картинка. Если я удаляю эти строки то она вверх перемещается. Давайте я Вам расскажу идею может Вы направите меня на верный путь, а то я с ImageView совсем пока не дружу. В общем есть основная картинка допустим машинка, и в ней не хватает 3, 4 не важно сколько кусков. Нужно сделать что-то вроде пазла, т.е. я наживаю на кусок и веду его в ту часть где он должен стоять, если правильно то кусок зафиксировался, если нет то вернулся на исходную. Буду рад любым предложениям)))
Yandex
Объявления
10.03.2014, 20:27     Движение ImageView. Объект возвращается на исходную позицию
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru