-

Как выйти из библиотеки изображений

Если вы загружали файл или изображение в библиотеку ресурсов, чтобы прикрепить его к тексту страницы, а теперь он вам не нужен, его можно удалить.

Обратите внимание: если вы удалите из библиотеки файл или изображение, которые еще используются на каких-либо страницах сайта, они исчезнут с публикации.

Чтобы удалить файл, войдите в «Библиотеку ресурсов», выбрав этот раздел на панели управления сайтом (слева).

Затем выделите галочками те файлы и изображения, которые вам больше не нужны: они отобразятся в синем цвете. В верхней части страницы активируется кнопка «Удалить»: нажмите ее.

Подтвердите удаление во всплывающем окне, нажав кнопку «ОК».

Удаление файлов из библиотеки — необратимый процесс! Если вы случайно удалите нужные файлы, их придется загружать заново.

После подтверждения система оповестит вас о том, что удаление прошло успешно.

Таким же образом можно удалять из библиотеки не отдельные файлы, а целые папки: просто выделите их галочками и нажмите кнопку «Удалить».

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

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

По умолчанию библиотеки в Windows 8.1 не отображаются, хотя их можно включить, нажав на вкладке "Вид" ленты кнопку "Область навигации". После этого они будет отображаться в области навигации Windows 8 также, как и в Windows 7.

Доступ к библиотекам в проводнике.

По умолчанию, отображаются библиотеки: документы, музыка, изображения, и видео; хотя, если Вы установили другое программное обеспечение (например, проигрыватель Microsoft Zune), могут быть добавлены и другие подкасты.

Также можно создать и свои собственные библиотеки для контента; например, Вы можете создать библиотеку со своими рабочими файлами.

Создание библиотеки.

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

Внимание. К библиотекам в Windows 8.1 можно добавить и съемные носители. Это полезно, если Ваш ультрабук или планшет имеет карту памяти для дополнительного хранения. Чтобы добавить в библиотеку определенное расположение (добавляется не файл, а локация), щелкните по файлам в нем правой кнопкой; потом в контекстном меню выберите "Включить в библиотеку". В появившемся списке щелкните по той библиотеке, в которую Вы хотите добавить свою папку.

Чтобы создать новую библиотеку, выполните следующие шаги:

  • Откройте на рабочем столе файловый проводник.
  • Щелкните в левой области по пункту библиотеки.
  • Щелкните правой кнопкой (или коснитесь и удерживайте), в любом свободном месте основного окна проводника.

Создание новой библиотеки.

  • В контекстном меню, выберите "Создать" и затем "Библиотека". После этого будет создана новая пустая библиотека, которой Вы должны дать имя.
  • Как только библиотека будет создана, дважды щелкните по ней, чтобы открыть.
  • Нажмите кнопку "Включить папку" и выберите нужную Вам папку. Сюда же можно добавить дополнительные папки.

Добавить папку в библиотеку.

Изменение отображения файлов в библиотеке.

Теперь Вы видите в библиотеке свою добавленную папку, но это не обычное окно проводника. Библиотека довольно гибкий инструмент, отображающий контент различными способами, способами которые не может предоставить обычный вид проводника.

  • Чтобы изменить вид, щелкните правой кнопкой (или коснитесь и удерживайте) в любом свободном месте главного окна.

Изменение показа файлов в библиотеке.

  • В контекстном меню, щелкните по "Расположить как" и затем по предпочтительному варианту расположения содержания библиотеки. Это действие может быть выполнено только щелчком правой кнопкой, не из ленты. Действие отличается от вышеописанных "Сортировать по" и "Группировать по".

Расположение файлов в библиотеке.

Вы видите, что Библиотека теперь располагает файлы по Вашему желанию. На рисунке фотографии расположены в библиотеке по тегом.

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

Просмотр фото по тегам.

Эти фотографии могут находиться в любых различных папках на жестком диске, но потому что у них один и тот же тег, они все показываются в Библиотеке.

Внимание. В пределах библиотек можно расположить файлы по типам, что отображает файлы как сложенные группы для документов Word, PDFs, и так далее. К сожалению, невозможно определить для отображения в библиотеке только один тип файла, отображаться будут полные папки.

Управление библиотеками.

Когда Вы видите библиотеку, в ленте появляется вкладка "Управление". Вкладка "Инструменты библиотеки" содержит инструменты для управления библиотекой, то есть какие папки в нее включены, по какому контенту библиотека оптимизируется, и будет ли данная библиотека отображаться в области навигации. Здесь же можно изменить значок для библиотеки, выбрав один из стандартных значков Windows или пользовательский ico-файл.

Читайте также:  Multi channel concurrent что это

Управление библиотекой в ленте проводника.

Папки, по умолчанию включенные в стандартные библиотеки Windows 8.1, находятся в C:User[Имя пользователя]. В дополнение к установленным по умолчанию папкам можно добавить или удалить и другие папки. Чтобы сделать это, щелкните по "Управление библиотеками" во вкладке "Управление" ленты.

Нажатие на ленте кнопки "Управление библиотекой" открывает диалоговое окно "Локация библиотеки", там вы найдете две простые кнопки "Добавить" и "Удалить". Вы должны иметь по крайней мере одну локацию, но можете их определить сколько угодно.

Добавление или удаление папок в библиотеку.

Внимание. Также в библиотеки на ПК можно добавить локальные папки и SD-карты. Для этого щелкните по ним правой кнопкой и появившемся меню выберите "Включить в Библиотеку".

Изменение локации для сохранения по умолчанию.

Остается решить где должны располагаться по умолчанию добавленные в библиотеки документы, музыка, изображения и видео. Куда они будут идти? В Вашу пользовательскую папку на диске C:? В определенную папку в библиотеке?

Для повышения безопасности хранения файлов разумно изменить место хранения библиотек по умолчанию.

Это можно сделать во время просмотра библиотек во вкладке "Инструменты библиотеки" на ленте файлового проводника.

В левой части ленты, есть кнопка "Установить место сохранения", которая показывает выпадающее меню, содержащее папки в этой библиотеке. Чтобы изменить место расположения по умолчанию, просто щелкните по соответствующей папке, после этого все новые файлы будут сохраняться в ней.

Настройка места расположения библиотек по умолчанию.

Добавление в библиотеки сетевых расположений.

Фактически, добавить сетевые расположения к Вашим библиотекам "Музыка", "Изображения" и "Видео" не сложно. Это в Windows 8.1 можно сделать двумя способами.

Первый способ состоит в создании символьной ссылки между библиотекой и содержащей нужные файлы папкой в Вашей сети:

  • Создайте папку C:Users[Имя пользователя] название папки.
  • Добавьте эту новую папку к своей библиотеке.
  • Удалите папку из расположения C:Users [Имя пользователя], но не удаляйте из библиотеки.
  • Откройте окно Командной строки из меню Win+X.
  • Введите MKLINK/D C:UsersUsernameFolderName\NetworkLocation, заменяя корректными путями к папкам.

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

Более дружественный способ добавить папку в библиотеку — использовать Windows Media Center. Стоит отметить, что в Windows 8.1, Windows Media Center больше не является стандартной функцией операционной системы, но доступен как дополнение для Windows 8.1 Pro.

Откройте Windows Media Center и добавьте сетевые расположения, содержащие Изображения, Музыку, и Видео (но не Документы). Для этого в главном меню, щелкните по Настройки ➤ Медиа библиотеки.

Запуститься мастер, который позволит Вам добавлять или удалять папки в Библиотеки. Когда будет спрошено, где располагаются файлы, выберите "На другом компьютере". После этого откроются сетевые диски, которые можно добавлять в библиотеки.

Использование медиацентра для добавления в библиотеки сетевых локаций.

В списке появятся все доступные сетевые локации, включая другие компьютеры в сети. Для добавления папок в библиотеки отметьте их.

Просмотр сетевых дисков для добавления в медиацентр.

Это фантастически простое обходное решение недостающей функциональности Windows.

Привет, Хабр! Не так давно в поисках приключений, новых проектов и технологий я стал роботом устроился в Redmadrobot. Получил стул, монитор и макбук, а для разогрева — небольшой внутренний проект. Нужно было допилить и опубликовать самописную библиотеку для просмотра медиаконтента, которую мы используем в наших проектах. В статье я расскажу, как за неделю разобраться в touch events, стать опенсурсером, найти багу в Android sdk и опубликовать библиотеку.

Начало

Одна из важных фич наших приложений-магазинов — возможность просматривать видео и фото товаров и услуг вблизи и со всех сторон. Мы не хотели изобретать велосипед и отправились на поиски готовой библиотеки, которая бы нас устроила.

Читайте также:  Как включить блютуз на ноутбуке lenovo b590

Планировали найти такое решение, чтобы пользователь мог:

  • просматривать фотографии;
  • масштабировать фото при помощи pinch to zoom и double tap;
  • просматривать видео;
  • листать медиаконтент;
  • закрывать карточку с фото вертикальным свайпом (swipe to dismiss).

Вот, что мы нашли:

  • FrescoImageViewer — поддерживает просмотр и пролистывание фото и основные жесты, однако не поддерживает просмотр видео и предназначен для библиотеки Fresco.
  • PhotoView — поддерживает просмотр фото, большинство основных жестов управления, кроме пролистывания, swipe to dismiss, не поддерживает просмотр видео.
  • PhotoDraweeView — аналогичная по функциональности PhotoView, но предназначена для Fresco.

Так как ни одна из найденных библиотек полностью не соотвествовала требованиям, нам пришлось написать свою.

Реализуем библиотеку

Чтобы получить нужную функциональность, мы доработали существующие решения из других библиотек. Тому, что получилось, решили дать скромное название Android Gallery.

Реализуем функциональность

Просмотр и масштабирование фотографий
Для просмотра фотографий взяли библиотеку PhotoView, которая из коробки поддерживает масштабирование.

Просмотр видео
Для просмотра видео взяли ExoPlayer, который переиспользутеся в MediaPagerAdapter. Когда пользователь открывает видео впервые, создаётся ExoPlayer. При переходе к другому элементу он ставится в очередь, так что при следующем запуске видео использоваться будет уже созданный экземпляр ExoPlayer. Это делает переход между элементами более плавным.

Перелистывание медиаконтента
Здесь мы использовали MultiTouchViewPager из FrescoImageViewer, который не перехватывает multi touch events, поэтому мы смогли добавить к нему жесты для масштабирования изображения.

Swipe to dismiss
В PhotoView не было поддержки swipe to dismiss и дебаунса (восстановления исходного размера картинки, когда картинка масштабируется в большую или меньшую сторону).
Вот как нам удалось с этим справиться.

Изучаем touch events для реализации swipe to dismiss

Прежде, чем перейти к поддержке swipe to dismiss, нужно разобраться, как работают touch events. Когда пользователь касается экрана, в текущей Activity вызывается метод dispatchTouchEvent(motionEvent: MotionEvent) , куда попадает MotionEvent.ACTION_DOWN . Этот метод решает дальнейшую судьбу события. Можно передать motionEvent в onTouchEvent(motionEvent: MotionEvent) на обработку касания или пустить дальше, сверху вниз по иерархии View. View, которая заинтересована в событии и/или в последующих событиях до ACTION_UP , возвращает true.

После все события текущего жеста (gesture) будут попадать в это View, пока жест не завершится событием ACTION_UP или родительский ViewGroup не перехватит управление (тогда во View придет событие ACTION_CANCELED ). Если событие обошло всю иерархию View и никого не заинтересовало, оно возвращается обратно в Activity в onTouchEvent(motionEvent: MotionEvent) .

В нашей библиотеке Android Gallery первое событие ACTION_DOWN доходит до dispatchTouchEvent() в PhotoView, где motionEvent передаётся в реализацию onTouch() , которая возвращает true. Дальше все события проходят такую же цепочку, пока не произойдёт одно из:

  • ACTION_UP ;
  • ViewPager попытается перехватить событие для пролистывания;
  • VerticalDragLayout попытается перехватить событие для swipe to dismiss.

Перехват событий может осуществлять только ViewGroup в методе onInterceptTouchEvent(motionEvent: MotionEvent) . Даже если View заинтересована в каком-либо MotionEvent, само событие будет проходить через dispatchTouchEvent(motionEvent: MotionEvent) всей предшествующей цепочки ViewGroup. Соответственно родители всегда «наблюдают» за своими детьми. Любой родительский ViewGroup может перехватить событие и вернуть true в методе onInterceptTouchEvent(motionEvent: MotionEvent) , тогда все дочерние View получат MotionEvent.ACTION_CANCEL в onTouchEvent(motionEvent: MotionEvent) .

Пример: пользователь удерживает палец на некотором элементе в RecyclerView, тогда события обрабатываются в этом же элементе. Но как только он начнёт двигать пальцем вверх/вниз, RecyclerView перехватит события, и начнётся скролл, а View получит событие ACTION_CANCEL .

В Android Gallery VerticalDragLayout может перехватывать события для swipe to dismiss или ViewPager — для перелистывания. Но View может запретить родителю перехватывать события, вызвав метод requestDisallowInterceptTouchEvent(true) . Это может понадобиться, если View нужно совершить такие действия, перехват родителем которых для нас не желателен.

Например, когда пользователь в плеере проматывает трек к конкретному времени. Если бы родительский ViewPager перехватил горизонтальный скролл, произошёл бы переход к следующему треку.

Для обработки swipe to dismiss мы написали VerticalDragLayout, но он не получал touch событий от PhotoView. Чтобы понять почему так происходит, пришлось разобраться, как обрабатываются touch события в PhotoView.

    При MotionEvent.ACTION_DOWN в VerticalDragLayout срабатывает interceptTouchEvent() , который возвращает false, т.к. данный ViewGroup интересуют только вертикальные ACTION_MOVE. Направление ACTION_MOVE определяется в dispatchTouchEvent() , после чего событие передаётся в метод super.dispatchTouchEvent() во ViewGroup, где происходит передача события в реализацию interceptTouchEvent() в VerticalDragLayout.

Когда событие ACTION_DOWN доходит до метода onTouch() в PhotoView, то вьюха отбирает возможность перехватывать управление событиями. Все последующие события жеста не попадают в метод interceptTouchEvent() . Возможность перехватывать управление отдаётся родителю только в случае завершения жеста или если происходит горизонтальный ACTION_MOVE у правой/левой границы изображения.

Читайте также:  Как залить бензин в паяльную лампу

Так как PhotoView разрешает родителю перехватывать управление только в случае горизонтального ACTION_MOVE , а swipe to dismiss — это вертикальный ACTION_MOVE , то VerticalDragLayout не может перехватить управление событиями для осуществления жеста. Для исправления нужно добавить возможность перехватывать управления в случае вертикального ACTION_MOVE .

Теперь в случае первого вертикального ACTION_MOVE PhotoView будет отдавать возможность перехвата родителю:

Следующий ACTION_MOVE будет перехвачен в VerticalDragLyout, при этом в дочерние View прилетит событие ACTION_CANCEL :

Все остальные ACTION_MOVE будут прилетать в VerticalDragLayout по стандартной цепочке. Важно, что после того как ViewGroup перехватывает управление событиями у дочернего View, дочерние View никак не могут вернуть себе управление.

Так мы реализовали поддержку swipe to dismiss для библиотеки PhotoView. В нашей библиотеке мы использовали вынесенные в отдельный модуль доработанные исходники PhotoView, а в оригинальный репозиторий PhotoView создали merge request.

Реализуем дебаунс в PhotoView

Напомним, что дебаунс — это анимация-восстановление допустимого масштаба, когда изображение масштабируется за его пределы.

В PhotoView такой возможности не было. Но раз уж мы начали копать чужой опенсорс, зачем останавливаться на достигнутом? В PhotoView можно задать ограничение на зум. Изначально это минимальный — х1 и максимальный — х3. За эти пределы изображение выйти не может.

Для начала мы решили убрать условие «запрет масштабирования по достижении минимума»: просто выкинули условие getScale() > mMinScale || scaleFactor > 1f . И тут внезапно…

Дебаунс заработал! Видимо, так произошло из-за того, что создатели библиотеки решили дважды подстраховаться, сделав и дебаунс, и ограничение на масштабирование. В реализации события onTouch, а именно в случае MotionEvent.ACTION_UP , если пользователь отмасштабировался больше/меньше максимума/минимума, запускается AnimatedZoomRunnable, который возвращает картинку к исходному размеру.

Также как и с swipe to dismiss, мы доработали PhotoView в исходниках нашей библиотеки и создали pull request с «добавлением» дебаунса в оригинальный PhotoView.

Исправляем внезапный баг в PhotoView

В PhotoView есть очень неприятный баг. Когда пользователь хочет увеличить изображение двойным тапом и у него случается приступ эпилепсии изображение начинает масштабироваться, оно может перевернуться на 180 градусов по вертикали. Этот баг можно встретить даже в популярных приложениях из Google Play, например, в ЦИАНе.

После долгого поиска мы всё-таки локализовали этот баг: иногда в матричное преобразование изображения для масштабирования на вход подаётся отрицательный scaleFactor, он-то и вызывает переворот изображения.

Для масштабирования из андроидовского ScaleGestureDetector достаём scaleFactor, который вычисляется следующим образом:

Если обложить данный метод дебаг-логами, можно отследить, при каких именно значениях переменных получается отрицательный scaleFactor:

Есть подозрение, что эту проблему пытались решить путём домножения spanDiff на SCALE_FACTOR == 0.5. Но это решение не поможет, если разница между mCurrSpan и mPrevSpan больше, чем в три раза. На этот баг уже даже заведён тикет, однако он до сих пор не исправлен.
Костыльное Самое простое решение этой проблемы — просто пропускать отрицательные значения scaleFactor. На практике пользователь не заметит, что изображение иногда зумируется чуть менее плавно, чем обычно.

Судьба пулл реквестов

Мы сделали локальное исправление и создали последний Pull Request в PhotoView. Несмотря на то, что некоторые PR висят там уже год, наши PR были добавлены в master-ветку и даже был выпущен новый релиз PhotoView. После чего мы решили выпилить локальный модуль из Android Gallery и подтянуть официальные исходники PhotoView. Для этого пришлось добавить поддержку AndroidX, который был добавлен в PhotoView в версии 2.1.3.

Где найти библиотеку

Исходный код библиотеки Android Gallery ищите тут — https://github.com/redmadrobot-spb/android-gallery, вместе с инструкцией по использованию. А для поддержки проектов, которые всё ещё используют Support Library, мы создали отдельную версию android-gallery-deprecated. Но будьте осторожны, ведь через год Support Library превратится в тыкву!

Что дальше

Сейчас библиотека полностью нас устраивает, но в процессе разработки возникли новые идеи. Вот некоторые из них:

  • возможность использовать библиотеку в любой вёрстке, а не только отдельным FragmentDialog;
  • возможность кастомизации UI;
  • возможность подмены Gilde и ExoPlayer;
  • возможность использовать что-то вместо ViewPager.

Ссылки

Пока писали статью, вышла похожая библиотека от разработчиков FrescoImageViewer. Они добавили поддержку transition animation, однако поддержка видео пока что есть только у нас. 🙂

Ссылка на основную публикацию
Как восстановить защищенную папку на самсунг
Тема безопасности личных данных выходит на первый план все чаще и чаще. Вероятность того, что при пересечении границы вас попросят...
Инновационные стратегии компании apple
Сервис Apple-World способен выполнить ремонт любой сложности, но рано или поздно телефон все-таки придется сменить. В таком случае волей-неволей начинаешь...
Как активировать деньги в скайпе
неофициальный блог Иногда пользователи с удивлением обнаруживают, что пропали деньги со Скайпа и в интерфейсе программы больше не отображается баланс....
Как восстановить маркер засохший
Обычный строительный (разметочный) маркер высох, как и чем его заправить. На упаковке маркеров (фломастеров) в начале прочитайте информацию о том...