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

DragAndDrop free on Layout - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Qt5 (QML) http://www.cyberforum.ru/android-dev/thread1551379.html
Здравствуйте! Как можно из cpp файла перенести переменную в модели(QML) в Qt5?
Android Как на кнопку назначить ScaleGesture Есть рабочий код для layout public class AndroidScaleGestureDetectorActivity extends Activity { TextView scaleGesture; ScaleGestureDetector scaleGestureDetector; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { http://www.cyberforum.ru/android-dev/thread1551372.html
Весь пакет java,gradle,genymotion,android sdk Android
Добрый день, форумчаны. Я не знаю, как описать проблему, опишу ее как смогу. Итак, я использую lubuntu. До этого использовал mint. Но пришлось переустановить, т.к он был более требовательным к ресурсам, чем ожидалось. Я хочу начать программировать под android, но у меня конкретные проблемы с установкой софта. Когда я ставлю intelijj idea, все что получается, то это перед установкой idea...
Менять xml программно Android
допустим есть такой файл бэкграунда: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:radius="200dp" /> <gradient android:angle="90" android:startColor="@color/lightGreen"
Android Программное добавление рамки Layout http://www.cyberforum.ru/android-dev/thread1550891.html
Добавляю рамку к Layout с помощью XML файла: <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="@dimen/border_line_thickness" android:color="#FF000000" /> <corners android:radius="0dp" /> </shape> Как добавить ее в коде java? (так как цвет будет всегда разный)
Android Сохранение ImageView Всем привет, У меня такой вопрос, есть код который сохраняет imageview в папку Pictures , все работает и сохраняет ,захожу в проводник в папку Pictures на андройде ,картинка есть, но пытаюсь зайти через Носитель (МТР) на компе там папка пустая, подскажите ,что нужно сделать? File root = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString());... подробнее

Показать сообщение отдельно
_Night_Scream_
57 / 69 / 7
Регистрация: 08.08.2013
Сообщений: 560
15.10.2015, 12:33  [ТС]     DragAndDrop free on Layout
Valakin, я включил в настройках телефона "Для разработчиков" пункт "Отображать касания"
Вот мои испытания.
На скринах буду двигать всегда слево направо.

Весь код.
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
import android.graphics.Point;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Display;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
 
public class MainActivity extends AppCompatActivity implements View.OnTouchListener, View.OnDragListener {
    String LOGCAT = "scream";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.ImgDrop).setOnTouchListener(this);
        findViewById(R.id.ImgDrop).getRootView().setOnDragListener(this);
    }
 
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(null, shadowBuilder, view, 0);
            view.setVisibility(View.INVISIBLE);
            return true;
        } else {
            return false;
        }
    }
 
    public boolean onDrag(View v, DragEvent event) {
        switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
 
                Display display = getWindowManager().getDefaultDisplay();
                Point size = new Point();
                display.getSize(size);
                int width = size.x;
                int height = size.y;
 
                int x = (int)event.getX();
                int y = (int)event.getY();
                Log.d(LOGCAT,"Старт. Касание x: " + x + " y: " + y);
                Log.d(LOGCAT,"Размер экрана. ширина: " + width + " высота: " + height);
                break;
 
            case DragEvent.ACTION_DROP:
                float X = event.getX();
                float Y = event.getY();
                Log.d(LOGCAT, "Отпустил: X: " + (int) X + " Y: " + (int) Y);
 
                View view = (View) event.getLocalState();
                view.setX(X);
                view.setY(Y);
 
                view.setVisibility(View.VISIBLE);
 
                Log.d(LOGCAT, "Картинка: X: " + view.getX() + " Y: " + view.getY());
                break;
            default:
                break;
        }
        return true;
    }
}
Дальше буду менять только метод onDrag и код события case DragEvent.ACTION_DROP.

Значит с этим кодом

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
case DragEvent.ACTION_DROP:
                float X = event.getX();
                float Y = event.getY();
                Log.d(LOGCAT, "Отпустил: X: " + (int) X + " Y: " + (int) Y);
 
                View view = (View) event.getLocalState();
                view.setX(X);
                view.setY(Y);
 
                view.setVisibility(View.VISIBLE);
 
                Log.d(LOGCAT, "Картинка: X: " + view.getX() + " Y: " + view.getY());
                break;
я ожидаю появление картинки от X вправо, от Y вниз, ну всегда считал что левый верхний угол будет.
Вот что получается (скрин 1).
Тоесть по оси Y картинка установилась в координата отпускания + высота картинки

Log получается такой
10-15 12:13:20.252 D/scream﹕ Старт. Касание x: 62 y: 230
10-15 12:13:20.253 D/scream﹕ Размер экрана. ширина: 1280 высота: 720
10-15 12:13:21.440 D/scream﹕ Отпустил: X: 529 Y: 314
10-15 12:13:21.444 D/scream﹕ Картинка: X: 529.58624 Y: 314.5631

На самом деле картинка появилась ниже по Y чем 314.

Теперь чтобы найти центр картинки судя по логу выше нужно сделать так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
 case DragEvent.ACTION_DROP:
                float X = event.getX();
                float Y = event.getY();
                Log.d(LOGCAT, "Отпустил: X: " + (int) X + " Y: " + (int) Y);
 
                View view = (View) event.getLocalState();
                view.setX(X - (view.getHeight() / 2));
                view.setY(Y - view.getHeight() - (view.getHeight() / 2));
 
                view.setVisibility(View.VISIBLE);
 
                Log.d(LOGCAT, "Картинка: X: " + view.getX() + " Y: " + view.getY());
                break;
Получается 2й скрин.
Логи:
10-15 12:29:02.355 D/scream﹕ Старт. Касание x: 58 y: 224
10-15 12:29:02.355 D/scream﹕ Размер экрана. ширина: 1280 высота: 720
10-15 12:29:03.391 D/scream﹕ Отпустил: X: 383 Y: 353
10-15 12:29:03.393 D/scream﹕ Картинка: X: 311.70023 Y: 137.50903

Центр по Y удалось получить только координата отпускания по Y минус полторы высоты картинки

А если взять картинку с другими данными, не изменится ли поведение?
Да и вообще почему картинка появляется ниже на одну высоту этой картинки?
Миниатюры
DragAndDrop free on Layout   DragAndDrop free on Layout  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru