Как изменить координаты x y экрана андроид

Содержание
  1. android виджет главного экрана x-y координаты
  2. 2 ответа
  3. Похожие вопросы:
  4. Русские Блоги
  5. Система координат окна и события касания экрана в Android
  6. 1. Система координат Android
  7. 2. Просмотр системы координат
  8. 3. Коснитесь event-MotionEvent.
  9. Русские Блоги
  10. Исчерпывающее объяснение системы координат приложения Android
  11. Исчерпывающее объяснение системы координат приложения Android
  12. 1. Предпосылки
  13. 2. Система координат Android
  14. 2-1 Разделение области экрана Android
  15. 2-2 Android Просмотр абсолютной относительной системы координат
  16. 2-3 Система координат, связанная с анимацией Android View
  17. 2-4 Android View скользящая связанная система координат
  18. 3. Резюме
  19. GetLeft (), getRight (), getTop (), getBottom () Android View
  20. Вызвать путаницу
  21. Понять концепцию координат и местоположения Android
  22. Соответствующий API в представлении
  23. Анализ случая
  24. Различные методы получения значений координат
  25. Вы действительно знаете координаты View?
  26. Болтовня
  27. Зачем писать этот блог?
  28. основная концепция
  29. Просмотр getLeft () и getRight () и getTop () и getBottom ()
  30. View getY (), связь между getTranslationY () и getTop ()
  31. GetScroolY View и scrollTo () и scrollBy () View
  32. scrollTo () и scrollBy ()
  33. Ширина и высота просмотра
  34. event.getY и event.getRawY ()
  35. Расширение, как получить высоту строки состояния (StatusBar) и строки заголовка (titleBar)
  36. Анализ исходного кода положительных и отрицательных параметров scrollBy () и scrollTo () View
  37. Зачем писать этот блог?
  38. Плоскость устройства Android Декартова система координат
  39. Разница в прокрутке между scrollBy () и scrollTo ()
  40. Положительные и отрицательные параметры scrollBy () и scrollTo () влияют на проблему прокрутки
  41. Анализ процесса выполнения исходного кода

android виджет главного экрана x-y координаты

Можно ли получить координаты X-Y виджета главного экрана? Мне нужно отобразить всплывающее окно относительно положения виджета, поэтому мне нужно получить координаты X и Y.

2 ответа

Знаете ли вы какие-нибудь примеры, скринкасты, которые документируют, как разработать виджет домашнего экрана на mono for android ? Я хотел бы разработать крошечный вид домашнего экрана и ищу правильный способ его кодирования.

Я пытаюсь реализовать виджет главного экрана Android. Мне интересно знать, почему я должен использовать RemoteViews при реализации виджетов?

Это часть намерения, используемого при нажатии на виджет. Просто позвоните getSourceBounds() по намерению, используемому для запуска вашей деятельности.

Это кодирование также помогло мне узнать координаты X-Y виджета на главном экране.

Похожие вопросы:

Я использую пользовательскую клавиатуру android для создания клавиатуры. OnKeyboardActionListener в android возвращает keyCode нажатой клавиши. Но мне нужны, в частности, экранные координаты x и y.

Одно из действий в моем приложении Android имеет относительный макет с двумя представлениями изображений, которые настраиваются в файле макета xml. Как я могу программно получить X,y расположение.

Возможный Дубликат : Раскадровка странный контроллер вид кадра происхождение на следующем снимке экрана координаты X & Y основного вида должны быть равны 0,0 (потому что это просто основной вид.

Знаете ли вы какие-нибудь примеры, скринкасты, которые документируют, как разработать виджет домашнего экрана на mono for android ? Я хотел бы разработать крошечный вид домашнего экрана и ищу.

Я пытаюсь реализовать виджет главного экрана Android. Мне интересно знать, почему я должен использовать RemoteViews при реализации виджетов?

Я работаю над демонстрацией HTML5 Canvas сфер, подпрыгивающих в пространстве 3D. Это очень просто сделать. Каждый шар имеет координаты X, Y и Z. Эти координаты затем преобразуются в координаты.

Как преобразовать местоположение пикселя (координаты x и y) с одного устройства Android на другие устройства Android с разным размером экрана и разным разрешением?

Я пытался создать виджет главного экрана android, который поддерживает горизонтальную прокрутку. Я вставил GridView в LinearLayout моего виджета. Мой GridView имеет некоторое количество столбцов. Я.

Заданы некоторые координаты (x, y) в логических пикселях относительно: В левом верхнем углу экрана. В левом верхнем углу какого-то контейнера. Как я могу узнать, какой виджет находится в этом.

Я пытался скрыть положение маркера широта-долгота до iPhone координат экрана x и y, но иногда это дает мне отрицательное значение. MapView добавляется в основной вид из раскадровки.

Источник

Русские Блоги

Система координат окна и события касания экрана в Android

1. Система координат Android

В физике для описания движения объекта необходимо выбрать систему отсчета. Так называемое скольжение — это движение относительно системы отсчета. В Android вершина в верхнем левом углу экрана берется за начало системы координат Android. От этой точки вправо — положительное направление оси X, а от этой точки вниз — положительное направление оси Y, как показано на следующем рисунке:

Система предоставляет такой метод, как getLocationOnScreen (int location []), чтобы получить местоположение средней точки системы координат Android, то есть левый верхний угол представления находится на Android. Координаты системы координат. Кроме того, координаты, полученные с помощью методов getRawX () и getRawY () в событии касания, также являются координатами в системе координат Android.

2. Просмотр системы координат

В дополнение к системе координат, упомянутой выше, в Android также существует система координат представления, которая описывает позиционные отношения дочернего представления в родительском представлении. Эти две системы координат не противоречат друг другу и не сложны, и их роли дополняют друг друга. Подобно системе координат Android, система координат представления также принимает начало координат вправо в качестве положительного направления оси X и начало координат вниз в качестве положительного направления оси Y, но в системе координат представления начало координат больше не является самым экраном в системе координат Android. Верхний левый угол, но сВерхний левый угол родительского представленияНачало координат, как показано на рисунке ниже:

В событии касания координаты, полученные с помощью getX () и getY (), являются координатами в системе координат представления.

3. Коснитесь event-MotionEvent.

Событие касания MotionEvent занимает центральное место в процессе взаимодействия с пользователем, а хорошее изучение сенсорных событий является основой для освоения последующего контента. Во-первых, давайте взглянем на некоторые общие константы событий, инкапсулированные в MotionEvent, которые определяют различные типы событий касания.

Обычно мы используем event.getAction () в методе onTouchEvent (событие MotionEvent) для получения типа события касания и используем метод switch-case для фильтрации. Шаблон кода в основном фиксирован, как показано ниже:

В случае отсутствия многоточечных операций приведенный выше код обычно можно использовать для завершения мониторинга событий касания, но это всего лишь шаблон кода, мы завершим конкретную логику в событии касания позже.
В Android система предоставляет множество методов для получения значений координат, относительных расстояний и т. д. Богатые методы — это хорошо, но они также сбивают с толку новичков. Я не знаю, какой метод использовать при каких обстоятельствах. Ниже приводится сводка некоторых API-интерфейсов в сочетании с системой координат Android, чтобы увидеть, как их использовать, как показано на следующем рисунке:

  • Метод просмотра для получения координат

GetTop (): получение расстояния от верха самого представления до верха его родительского представления.
getLeft (): получает расстояние от левой стороны самого представления до левой стороны его родительского представления.
getRight (): получить расстояние от правой стороны самого представления до левой стороны его родительского представления.
getBottom (): получить расстояние от низа самого представления до верха его родительского представления.

  • Методы, предоставляемые MotionEvent

GetX (): получить расстояние от точки касания от левой стороны обзора, то есть координаты обзора.
getY (): получить расстояние между точкой касания и верхней частью представления, которое является координатой представления.
getRawX (): получает расстояние до точки касания от левой стороны всего экрана, то есть абсолютные координаты.
getRawY (): получить расстояние от точки касания от верхней части всего экрана, то есть абсолютные координаты.

Примечание. Система координат представления относится к родительскому элементу управления.

Источник

Русские Блоги

Исчерпывающее объяснение системы координат приложения Android

Исчерпывающее объяснение системы координат приложения Android

1. Предпосылки

В прошлом году многие люди в личных сообщениях просили меня поговорить о настраиваемых элементах управления. На самом деле, многие блоги в Интернете рассказывают о различных настраиваемых элементах управления, но большинство из них преподаются рыбками, но немногие из них обучаются более систематически. Ю, и так как у него нет времени планировать эту серию статей, я хочу вспомнить эту серию статей недавно, поэтому давайте сначала подведем итоги основных знаний о настраиваемой системе координат элементов управления.

Читайте также:  Hd медиаплеер android tv xiaomi mi box 4k

Многие люди могут отклонить этоAndroidОднако, если вы хотите досконально изучить, как настраивать элементы управления, я хотел бы сказать, что понимание значений координат различных систем координат Android и некоторых API-интерфейсов определенно является небольшим, но не пренебрежимо малым навыком; так называемые пользовательские представления Android являются основными на XXXX ( Фактически, большинство методов перезаписи имеют дело с логическими операциями с координатами, поэтому давайте сначала поговорим о системе координат Android.

2. Система координат Android

Говоря о системе координат Android, это на самом деле трехмерная координата с осью Z вверх, осью X вправо и осью Y вниз. Точечная обработка этих трехмерных координат может составлять богатый интерфейс Android или анимационные эффекты, поэтому систему координат Android можно рассматривать как эскиз размера здания во всем интерфейсе Android.Давайте взглянем на эти связанные концепции.

2-1 Разделение области экрана Android

Давайте посмотрим на картинку, чтобы понять разделение на области экрана Android (для более подробного обсуждения этого вопроса вы можете увидеть»Анализ исходного кода механизма анализа загрузки setContentView и LayoutInflater приложения Android»В одной статье есть объяснение некоторых принципов), а именно:

На картинке выше мы можем интуитивно увидеть определение разделения экрана Android. Ниже мы приводим некоторые координаты или методы измерения общих областей в этих областях. следующим образом:

обращать внимание:Вышеупомянутые методы лучше переносить в методе onWindowFocusChanged () Activity или позже, потому что только тогда реальное отображение будет в порядке. Если вы не понимаете, вы можете прочитать мой предыдущий блог о setContentView.

2-2 Android Просмотр абсолютной относительной системы координат

Мы проанализировали разделение экрана Android выше и обнаружили, что наше обычное внимание при разработке на самом деле сосредоточено на области макета просмотра, поэтому давайте подробно поговорим о различных системах координат, связанных с областью просмотра. Сначала посмотрите на картинку ниже:

С помощью приведенного выше рисунка мы можем дать очень интуитивное объяснение некоторых связанных с координатами методов View, но должно быть ясно, что эти методы должны быть действительными после макета, как показано ниже:

Просмотр метода статических координат Объяснение
getLeft() Возвращает расстояние от левой стороны самого представления до левой стороны родительского макета.
getTop() Возвращает расстояние от верхнего края самого представления до верхнего края родительского макета.
getRight() Возвращает расстояние от правой стороны самого представления до левой стороны родительского макета.
getBottom() Возвращает расстояние от нижнего края самого представления до верхнего края родительского макета.
getX() Возвращаемое значение — getLeft () + getTranslationX (), когда setTranslationX (), getLeft () не изменяется, getX () изменяется.
getY() Возвращаемое значение — getTop () + getTranslationY (), когда setTranslationY (), getTop () не изменяется, getY () изменяется.

В то же время вы также можете видеть, что на приведенном выше рисунке дается некоторое объяснение методов, предоставляемых MotionEvent, когда палец касается экрана, а именно:

Координатный метод MotionEvent Объяснение
getX() Расстояние от текущего события касания слева от текущего просмотра
getY() Расстояние от текущего события касания до верхнего края текущего просмотра
getRawX() Расстояние от текущего события касания до левой части всего экрана
getRawY() Расстояние между текущим событием касания и верхним краем всего экрана.

Вышеупомянутое объясняет значение различных методов getXXX, которые вы видите во многих кодах для математических и логических операций. Но выше только что говорилось о некоторых относительно статических отношениях координат точек Android, давайте взглянем на несколько методов View, которые тесно связаны с указанными выше методами. следующим образом:

Просмотр метода ширины и высоты Объяснение
getWidth() Действительно после макета, возвращаемое значение — mRight-mLeft, что обычно относится к ширине меры (мера может быть бесполезной), но это не обязательно.
getHeight() Действительно после макета, возвращаемое значение — mBottom-mTop, что обычно относится к высоте меры (мера может быть бесполезной), но это не обязательно.
getMeasuredWidth() Верните значение mMeasuredWidth, полученное в процессе измерения, для справки по макету, что может оказаться бесполезным.
getMeasuredHeight() Верните значение mMeasuredHeight, полученное в процессе измерения, для ссылки на макет, что может быть бесполезным.

Приведенное выше объясняет некоторые значения получения ширины и высоты при настройке View. Давайте рассмотрим некоторые методы для View для получения позиции на экране, но эти методы необходимо использовать после метода onWindowFocusChanged () Activity. Как показано ниже:

Ниже мы приводим результаты некоторых методов координат представления, задействованного на приведенном выше рисунке (результаты используют фактические координаты, возвращаемые методом, и не полагаются на фактическое преобразование абсолютных координат выше. Вышеупомянутые абсолютные координаты служат только для иллюстрации положения в примере), :

Просмотреть метод Результат View1 выше Результат View2 выше Описание вывода
getLocalVisibleRect() (0, 0 — 410, 100) (0, 0 — 410, 470) Получает видимую область координат самого представления. Координаты принимают его верхний левый угол в качестве начала координат (0,0), а другая точка — это координаты нижнего правого угла видимой области относительно ее точки (0,0). Фактически, текущая высота View2 равна 550, а видимая высота равна 470.
getGlobalVisibleRect() (30, 100 — 440, 200) (30, 250 — 440, 720) Получите видимую область просмотра в абсолютной системе координат экрана. Координаты принимают верхний левый угол экрана в качестве начала координат (0,0), а другая точка — это координаты нижнего правого угла видимой области относительно начала координат (0,0) экрана.
getLocationOnScreen() (30, 100) (30, 250) Координаты относятся ко всему экрану, а координата Y — это расстояние от верхнего левого угла обзора до верхней части экрана.
getLocationInWindow() (30, 100) (30, 250) Если это обычное действие, координата Y — это верхний левый угол представления до верхней части экрана (размер окна в это время равен размеру экрана); если это диалоговое действие, координата Y — это расстояние от верхней части строки заголовка текущего действия в диалоговом режиме до верхнего левого угла представления.

До сих пор были описаны часто используемые методы и значения статического сбора координат и обработки связанных видов.Давайте взглянем на некоторые объяснения динамики (так называемое движение — это просто мое личное имя).

2-3 Система координат, связанная с анимацией Android View

Фактически, когда мы используем анимацию, особенно при анимации анимации, вы обнаружите, что задействовано много параметров координат, которые на какое-то время являются относительными, а какое-то время абсолютными, и вы можете оказаться в ловушке различных кругов. Тогда посмотри«Подробное объяснение всего использования анимации для разработки приложений Android»В этом блоге подробно описывается система координат, относящаяся к анимации Android, поэтому я не буду повторять ее здесь.

2-4 Android View скользящая связанная система координат

Другая группа часто используемых и важных методов, тесно связанных с координатами, предоставляемыми View, связана с прокруткой или скольжением. Ниже мы даем соответствующие объяснения (Особое внимание: scrollTo () и scrollBy () представления используются для перемещения содержимого представления, а не для изменения положения представления; чтобы изменить положение представления на экране, вы можете использовать методы offsetLeftAndRight () и offsetTopAndBottom (), которые вызовут getLeft () Эквивалентное изменение.),следующим образом:

Посмотреть метод скольжения Эффект и описание
offsetLeftAndRight(int offset) Переместите View в горизонтальном направлении, смещение будет обычным перемещением по оси x, и весь View будет перемещен, getLeft () изменится.Пользовательский вид полезен
offsetTopAndBottom(int offset) Переместите View в вертикальном направлении.Если смещение является обычным перемещением по оси Y, весь View будет перемещен, и getTop () изменится.Пользовательский вид полезен
scrollTo(int x, int y) воляКонтент в просмотре (а не во всем просмотре)Сдвиньте в соответствующее положение, начало исходной координаты — это верхний левый угол ParentView, и если x и y регулярны, они перемещаются в направлении, противоположном оси xy, и наоборот.
scrollBy(int x, int y) Продолжайте перемещать xy на основе scrollTo ().
setScrollX(int value) Суть в scrollTo (), но меняет только скольжение по оси Y.
setScrollY(int value) Суть в scrollTo (), но меняет только скольжение по оси X.
getScrollX()/getScrollY() Получите смещение текущей позиции скольжения.

Что касается параметров scrollBy () и scrollTo () Android View, которые передают положительные числа, но движутся в отрицательном направлении системы координат, у многих могут возникнуть сомнения или даже механические выводы. Здесь мы вкратце даем реальную причину этой функции — Анализ исходного кода выглядит следующим образом:

В комментарии к методу View четко указано, что он запускает методы onScrollChanged () и invalidated (). Затем мы обратим наше внимание на процесс draw (), запускаемый методом invalidated (). В процессе draw () на самом деле будет запущено следующее. Метод invalidate () выглядит следующим образом:

Ядро здесь, я считаю, что все знают, что происходит, без моих объяснений, так что вы можете исправить это сами.

Обратите особое внимание на методы scrollTo () и scrollBy ():Если вы вызываете метод scrollTo () для ViewGroup для прокрутки содержимого ViewGroup, если вы хотите прокрутить ViewGroup, затем вложите для нее внешний слой и прокрутите внешний слой.

3. Резюме

Можно обнаружить, что приведенное выше только иллюстрирует некоторые часто используемые концепции, связанные с координатами в представлении. Понимание и изучение этих концепций координат о настраиваемых элементах управления является только основой и предзнаменованием последующего содержимого, поэтому необходимо полностью понять эту часть содержимого, прежде чем продолжить Учить новые вещи.

Есть и другие методы, связанные с получением координат в представлении, но они обычно не используются, поэтому вы можете проверить API или отладку, чтобы увидеть явление и узнать, когда вы его используете. Здесь ограничены пространство и время.

GetLeft (), getRight (), getTop (), getBottom () Android View

Вызвать путаницу

В процессе анализа процесса аннулирования представления я обнаружил, что левая, правая, верхняя и нижняя части представления отличаются от того, что я понял. Теперь я хочу проанализировать конкретное значение этих значений.

Понять концепцию координат и местоположения Android

Система координат выражает абсолютные координаты определенной точки в двухмерном представлении посредством комбинации двух чисел на оси X и оси Y. Например, (30, 100) обычно представляет собой точку, в которой пересекаются оси X 30 и Y 100. В Android левый верхний угол — это начало координат (0,0), горизонтальное направление — это ось X слева направо, а вертикальное направление — ось Y. Сверху вниз, левый угол соответствует значению оси X, а верхний — оси Y С помощью этих двух значений система Android может узнать начальную точку рисования представления, а конкретные значения верхнего, нижнего, левого и правого края представления можно получить с помощью Wdith и Height, а представление можно нарисовать в абсолютной позиции на экране. Справа и снизу рассчитываются следующим образом:

Соответствующий API в представлении

Анализ случая

По моему мнению:

Положение синей области слева = 0, сверху = 0, координаты (0, 0)

Положение желтой области слева = 60, сверху = 115 координат (60, 115)

Положение зеленой зоны слева = 115, сверху = 170, координаты (115, 170)

Зеленая область здесь неправильно понята. Я думаю, что положение зеленой области соответствует значению координаты (0, 0) синей области. Из значения координаты, напечатанного в правом нижнем углу изображения выше, вы можете увидеть, что оно такое же, как и то, что я перечислил ниже. Значения несовместимы, посмотрите на картинку ниже, чтобы понять

Сводка: значения левого, верхнего, правого и нижнего края представления относятся к относительному положению родительского представления, а зеленая область — это координаты родительского представления (то есть желтая область — это координаты точки (0, 0)). Это не должно быть (115, 170) вместо (55, 55)

Различные методы получения значений координат

Вы действительно знаете координаты View?

Болтовня

View нам знаком. С тех пор, как мы связались с Android, мы поддерживаем связь с View. Интерфейс полон представлений, таких как TextView, Button, LinearLayout и т. Д., Которые мы часто используем, но мы действительно понимаем View. ? Особенно координаты View. mLeft, mRight, mY, mX, mTranslationY, mScoollY, координаты относительно экрана и т. д., действительно ли вам понятны эти концепции? Если это действительно ясно, то вам не обязательно читать этот блог. Если у вас все еще есть некоторая неясность, я предлагаю вам потратить несколько минут, чтобы прочитать его. Этот блог короче, и его можно прочитать за несколько минут.

Зачем писать этот блог?

Поскольку очень важно освоить координаты View, особенно для пользовательского View, обучение анимации имеет большое значение.

Этот блог в основном объясняет проблему

  • View getLeft (), getRight (), getTop (), getBottom ()
  • Связь между getY (), getTranslationY () и getTop () View
  • GetScroolY View и scrollTo () и scrollBy () View
  • event.getY и event.getRawY ()
  • Расширение, как получить высоту строки состояния (StatusBar) и строки заголовка (titleBar)

основная концепция

Кратко объясните (в приведенном выше действии используется стиль по умолчанию, будут отображаться строка состояния и строка заголовка): самая большая зеленая область — это экранный интерфейс, вторая по величине красная область называется «областью интерфейса приложения», а наименьшая фиолетовая область называется Это «Просмотр области рисования»; часть в верхней части экрана и за пределами области интерфейса приложения, которая отображает информацию об операторе сети аккумулятора мобильного телефона, является «строкой состояния», а часть в верхней части области приложения и за пределами области рисования Просмотр, в которой отображается имя действия, называется «заголовком». столбец «.

На этой картинке мы видим

В Android, когда существует ActionBar, высота экрана = высота строки состояния + высота области приложения = высота строки состояния + (высота строки заголовка + высота области рисования Просмотр)

Когда ActionBar не существует, высота экрана = высота строки состояния + высота области приложения = высота строки состояния + (высота области рисования Просмотр)

Просмотр getLeft () и getRight () и getTop () и getBottom ()

вверху — ордината левого верхнего угла, слева — абсцисса левого верхнего угла, справа — абсцисса правого нижнего угла, а внизу — ордината правого нижнего угла, которые все относительно него.Прямой родительский просмотрС точки зрения, а не относительноэкранС точки зрения. Этот момент необходимо четко различать. Координаты указаны относительно экрана, а как получить координаты относительно экрана?

В настоящее время ни одна из переменных в представлении не относится к экрану, но мы можем получить координаты относительно экрана. Вообще говоря, если мы хотим получить координаты и высоту View, мы должны дождаться, пока View будет нарисован. Это недоступно в методе onCreate () Activity. Вы должны дождаться, пока View будет нарисован, чтобы получить основание. Вообще говоря, есть в основном следующие два метода определения координат ответа View.

Первый метод вызывается в методе onWindowFocusChanged ()

Второй метод — измерить, когда нарисовано дерево представления.

View getY (), связь между getTranslationY () и getTop ()

getY()

Added in API level 14
Визуальная позиция по оси Y этого представления в пикселях. (Возвращается визуальный значок представления, то есть координата Y позиции, которую мы видим нашими глазами. Значение по умолчанию такое же, как и getTop (). Срочно, поясню ниже)

getTranslationY()

Added in API level 14
Вертикальное положение этого представления относительно его верхнего положения в пикселях (смещение относительно верха в вертикальном направлении, значение по умолчанию — 0).

Итак, какова связь между getY (), getTranslationY () и getTop ()?

Из приведенного выше исходного кода мы можем узнать, что getY () = getTranslationY () + getTop (), а значение по умолчанию для getTranslationY () равно 0, если мы не изменим его с помощью setTranlationY (), которое является значением по умолчанию для getY, которое мы получили выше. То же, что и getTop ()

Итак, как нам изменить верхнее значение и значение Y? Очевидно, что вызов соответствующих методов набора, а именно setY () и setTop (), может изменить их значения.

GetScroolY View и scrollTo () и scrollBy () View

getScrollY — это специальная функция, поскольку она включает значение, называемое mScrollY. Проще говоря, getScrollY обычно получает 0, если только вы не вызвали scrollTo или scrollBy для его изменения.

scrollTo () и scrollBy ()

Из буквального значения мы можем узнать значение scrollTo () и scrollBy () относительно текущей позиции. Конечно, это также может быть отражено в исходном коде.

Следует отметить несколько моментов

  • Независимо от того, является ли это scrollTo или scrollBy, на самом деле он прокручивает содержимое View, а не само View. Вы можете провести небольшой эксперимент. Фон LinearLayouy желтый, а sub-LinearLayout помещается внутри. Фон синий. Вызов scrollTo или scrollBy для перемещения Дочерний LinearLayout всегда синий.
  • Кроме того, параметры функций scrollTo и scrollBy «противоположны» системе координат. Например, scrollTo (-100,0), содержимое представления перемещается в положительном направлении оси X. Противоположное значение цитируется, потому что это не совсем противоположное. , Вы можете увидеть исходный код для подробностей, вы можете увидеть анализ исходного кода этих двух функцийАнализ исходного кода Android положительных и отрицательных параметров scrollBy () и scrollTo () View, С одного взгляда.

Ширина и высота просмотра

Мы видим, что высота Android определяется совместно mBottom и mTop, так как же нам установить высоту Android? Некоторые люди скажут, что установка android: height = ”” непосредственно в xml — это нормально, а что, если мы хотим динамически устанавливать высоту? Вы можете подумать о методе setWidth ()? Но мы перебрали все методы View, но не нашли метод setWidth (). Как динамически установить высоту? На самом деле есть два способа

Второй способ — индивидуально изменить значение верха или низа. Этот метод не рекомендуется.

Что касается ширины, она в основном такая же, как высота, за исключением того, что она определяется совместно mRight и mLeft.

Следует отметить, что в процессе выполнения анимации не рекомендуется использовать LayoutParams для изменения состояния View, потому что изменение LayoutParams вызовет метод requestLayout (), который будет отмечать текущий View и родительский контейнер и отправлять его слой за слоем, пока ViewRootImpl не обработает его. Для этого события ViewRootImpl вызовет три основных процесса. Начиная с меры, каждое представление, содержащее бит метки и его вложенные представления, будет измерено, размечено и отрисовано. Низкая производительность. Исходный код отражен следующим образом: Подробнее о методе requestLayout () Анализ может просмотреть этот блогAndroid Просмотр углубленного анализа requestLayout, invalidate и postInvalidate

Поэтому, если мы хотим изменить состояние представления во время выполнения анимации после api 14, рекомендуется использовать такие методы, как setTranslationY () и setTranslationX (0 и т. Д.), И стараться избегать изменения LayoutParams. Поскольку производительность слишком высока, она оставляет желать лучшего.

event.getY и event.getRawY ()

Чтобы различать MotionEvent.getRawX () и MotionEvent.getX () ;,

В общедоступном логическом onTouch (представление просмотра, событие MotionEvent), когда вы касаетесь элемента управления, x, y — это относительные положения верхней левой точки элемента управления (самого элемента управления). И rawx, rawy всегда относятся к положению на экране. getX () — это координата x виджета относительно его верхнего левого угла, а getRawX () — значение координаты x относительно верхнего левого угла экрана (примечание: верхний левый угол этого экрана является верхним левым углом экрана мобильного телефона, независимо от того, есть ли у действия titleBar или нет. полноэкранный).

Расширение, как получить высоту строки состояния (StatusBar) и строки заголовка (titleBar)

Здесь нам нужно обратить внимание на то, что при наличии ActionBar мы можем получить высоту titleBar этим методом, в противном случае он не будет доступен, потому что viewTop равен 0.

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

Анализ исходного кода положительных и отрицательных параметров scrollBy () и scrollTo () View

Зачем писать этот блог?

При использовании scrollBy () или scrollTo () в View раньше я обнаружил, что их параметры перемещаются в обратном направлении, когда они положительные, и перемещаются в положительном направлении, когда они отрицательны. Итак, я погуглил и обнаружил, что многие блоги были либо репостированы, либо подвергнуты прямому плагиату, а затем названы оригинальными. Что еще хуже, эти сообщения в блогах были репостированы и скопированы, и все они сказали, что View был в scrollBy () или scrollTo ( ), их декартовы системы координат противоположны, что, очевидно, неверно.
Хорошо, давайте не будем болтать ерунды, чтобы войти в тему.

Плоскость устройства Android Декартова система координат

Прежде чем проводить анализ, мы должны сначала установить понятие плоской прямоугольной системы координат экрана Android-устройства. В телефонах Android концепция прямоугольной системы координат экрана проста:
Левый верхний угол экрана — начало прямоугольной системы координат (0,0).
От исходной точки слева — отрицательное направление оси X, а справа — положительное направление оси X
Начиная с начала координат, вверх — отрицательное направление оси Y, а вниз — положительное направление оси Y

Вышеупомянутые концепции можно резюмировать на следующем рисунке:

В Android мы обычно говорим, что координаты представления на экране на самом деле являются координатами левого верхнего угла представления. Вызов метода invalidate () представления приведет к перерисовке представления.
Просмотр scrollBy () и scrollTo ()

Прежде чем анализировать scrollBy () и scrollTo (), давайте посмотрим на фрагмент исходного кода:

Разница в прокрутке между scrollBy () и scrollTo ()

scrollTo (x, y): используйте invalidate для прокрутки представления непосредственно к координатам, откалиброванным параметрами x и y
scrollBy (x, y): прокрутка относительно текущих координат. Из приведенного выше кода легко увидеть, что тело метода scrollBy () — это только одна строка кода, которая вызывает метод scrollTo (). Метод scrollBy () сначала добавляет параметр x к атрибуту mScollX и атрибут mScrollY к параметру y, а затем Приведенный выше результат передается в качестве параметра для вызова метода scrollTo ()

Положительные и отрицательные параметры scrollBy () и scrollTo () влияют на проблему прокрутки

Когда параметр отрицательный, scrollBy () и scrollTo () прокручиваются в положительном направлении оси координат; когда параметр положительный, прокручиваются в отрицательном направлении оси координат. Насколько нам известно, когда параметр отрицательный, прокрутите до отрицательного направления оси координат; когда параметр положительный, прокрутите до положительного направления оси координат.
Тогда почему переданные параметры и направление прокрутки, вызванное этими двумя методами, отличаются от нашего обычного восприятия?
Давайте проследим за анализом исходного кода этой проблемы. Если вы не хотите анализировать его шаг за шагом, начиная с процесса выполнения, вы можете напрямую посмотреть последний абзац исходного кода этой статьи.

Анализ процесса выполнения исходного кода

Поскольку тело метода scrollBy (x, y) имеет только одну строку и вызывается scrollTo (x, y), нам нужно только проанализировать его с помощью scrollTo (x, y).
В scrollTo (x, y) x и y присваиваются mScrollX и mScrollY соответственно, и, наконец, вызывается метод invalidate (true). Кажется, что здесь нет никакого способа, но это не так. Мы знаем, что метод invalidate уведомит View о необходимости перерисовки.
Затем мы можем пропустить scrollTo (x, y) для анализа метода draw () View. Как обычно, предыдущий фрагмент исходного кода перед анализом метода onDraw:

В этом фрагменте кода мы непосредственно находим метод onDrawScrollBars (холст) и обнаруживаем, что этот метод недалеко от истины. Исходный код:

Для приведенного выше кода мы непосредственно находим блок операторов структуры if (drawVerticalScrollBar || drawHorizontalScrollBar). В блоках операторов горизонтальной и вертикальной прокрутки можно найти ключевую строку недействительности (слева, сверху, справа, снизу), а затем исходный код:

Источник

Читайте также:  Проект восстановление для андроид
Оцените статью