allprojects {
repositories {
maven {
url 'https://s01.oss.sonatype.org/content/repositories/releases/'
}
}
}
dependencies {
implementation('com.gitee.chinasoft_ohos:MaterialScrollBar:1.0.0')
...
}
Проект можно запустить непосредственно с использованием SDK 6 и DevEco Studio 2. 2 Beta1.
Если проект не запускается, удалите файлы project.gradle, .idea, build, gradle, build.gradle, а затем создайте новый проект в соответствии со своей версией и скопируйте соответствующие файлы нового проекта в корневую директорию.
<com.turingtechnologies.materialscrollbardemo.MaterialScroller
ohos:id="$+id:fast"
ohos:height="match_parent"
ohos:width="match_content"
ohos:align_parent_right="true"
ohos:orientation="vertical"
app:bubbleColor="#ff0099"
app:bubbleTextColor="#e0e0e0"
app:bubbleTextSize="24fp"
app:handleColor="#ff0099"
app:textStyle="bold">
</com.turingtechnologies.materialscrollbardemo.MaterialScroller>
``` 2. Настройка плавающего окна Indicator
```java
/**
* Определение ползунка
*/
@Override
public Component provideHandleView(ComponentContainer container) {
handle = new Hand(getContext());
DirectionalLayout.LayoutConfig layoutConfig = new DirectionalLayout.LayoutConfig(60, 300);
handle.setLayoutConfig(layoutConfig);
handle.setMarginLeft(10);
return handle;
}
/**
* Определение плавающего окна
*/
@Override
public Component provideBubbleView(ComponentContainer container) {
int radius = AttrHelper.vp2px(paddingDefault, getContext());
float[] radii = new float[]{
radius, radius,
3. MateriaScroller
Определение атрибутов
```
```java
handleColor = AttrValue.get(attrSet, "handleColor", new Color(STYLE_NONE));
handleComColor = AttrValue.get(attrSet, "handlecomColor", new Color(STYLE_NONE));
bubbleColor = AttrValue.get(attrSet, "bubbleColor", new Color(STYLE_NONE));
bubbleTextColor = AttrValue.get(attrSet, "bubbleTextColor", new Color(STYLE_NONE));
bubbleTextSize = AttrValue.getDimension(attrSet, "bubbleTextSize", STYLE_NONE);
textStyle = AttrValue.get(attrSet, "textStyle", "");
```
Обработка событий скроллинга
```
```
/**
* Получение общего значения смещения по высоте
*
* @return Общее значение смещения
*/
protected int getTotalScrollH() {
return totalScrollH;
}
``````java
private void initHandleMovement() {
handle.setTouchEventListener(new TouchEventListener() {
@Override
public boolean onTouchEvent(Component component, TouchEvent event) {
MmiPoint mScreenPosition = event.getPointerScreenPosition(0);
switch (event.getAction()) {
case TouchEvent.PRIMARY_POINT_DOWN:
scrollMax();
if (titleProvider != null) {
viewProvider.onHandleGrabbed();
float offsetY = mScreenPosition.getY() - handle.getLocationOnScreen()[1];
offset = offsetY;
return true;
}
break;
case TouchEvent.POINT_MOVE:
scrollMax();
isChangingPosition = true;
float relativePos = getRelativeTouchPosition(event);
if (relativePos > 1) relativePos = 1;
// Иначе если (относительная позиция < 0) относительная позиция = 0;
else if (relativePos < 0) {
relativePos = 0;
}
// Устанавливаем прокрутку в положении (относительная позиция);
setScrollPosition(relativePos);
// Устанавливаем RecyclerView в положении (относительная позиция);
recyclerView.smoothScrollToPosition((int)(relativePos * totalItemCount));
return true;
}
return false;
}
});
}
```
```markdown
```diff
- Иначе если (относительная позиция < 0) относительная позиция = 0;
+ else if (relativePos < 0) {
+ relativePos = 0;
+ }
- Устанавливаем прокрутку в положении (относительная позиция);
+ setScrollPosition(relativePos);
- Устанавливаем RecyclerView в положении (относительная позиция);
+ recyclerView.smoothScrollToPosition((int)(relativePos * totalItemCount));
```Слайдинговый утилит класс `ScrollingUtilities`
Контрольные элементы и их координаты на экране
```diff
public static float getViewByIdrawY(Component view) {
int[] location = new int[2];
location[0] = 0;
location[1] = (((Component) view.getComponentParent()).getLocationOnScreen())[1];
return location[1];
}
```
Получение минимального значения
```diff
public static float getValueInRange(float мин, float макс, float значение) {
float минимальное = Math.max(мин, значение);
return Math.min(минимальное, макс);
}
```
Атрибутный утилит класс `AttrValue````diff
Чтение атрибутов XML
public static <T> T get(AttrSet attrSet, String ключ, T defaultValue) {
Если (!attrSet.getAttr(ключ).isPresent()) {
Возвращаем (T) defaultValue;
}
Attr attr = attrSet.getAttr(ключ).get();
Если (defaultValue instanceof String) {
Возвращаем (T) attr.getStringValue();
} Или если (defaultValue instanceof Long) {
Возвращаем (T) (Long) (attr.getLongValue());
} Или если (defaultValue instanceof Float) {
Возвращаем (T) (Float) (attr.getFloatValue());
} Или если (defaultValue instanceof Integer) {
Возвращаем (T) (Integer) (attr.getIntegerValue());
} Или если (defaultValue instanceof Boolean) {
Возвращаем (T) (Boolean) (attr.getBoolValue());
} Или если (defaultValue instanceof Color) {
Возвращаем (T) (attr.getColorValue());
} Или если (defaultValue instanceof Element) {
Возвращаем (T) (attr.getElement());
} Иначе {
Возвращаем (T) defaultValue;
}
}
```
#### Информация о тестировании
```diff
CodeCheck проверка кода прошла успешно
CloudTest проверка кода прошла успешно
Программа прошла проверку на наличие вирусов
Функциональность текущей версии demo практически не отличается от оригинальной компоненты
```
#### Версионирование
- 1. 0. 0
#### Информация о правах и лицензиях
Material Scroll Bar:
```diff
Copyright 2016-2017 Turing Technologies, некоммерческой организации Wynne Plaga.
Лицензировано по лицензии Apache License, версия 2. 0 ("Лицензия");
Вы можете использовать этот файл только в соответствии с Лицензией.
Вы можете получить копию Лицензии по адресу
http://www.apache.org/licenses/LICENSE-2. 0
``````apache. org/licenses/LICENSE-2. 0
Кроме случаев, когда это требует применимое законодательство или письменное соглашение, программное обеспечение,
распространяемое в рамках Лицензии, предоставляется «как есть» без каких-либо гарантий или условий любого типа,
явных или подразумевающихся.
Увидеть лицензию для получения конкретных правил и ограничений, предусмотренных Лицензией.Это лицензирование применимо ко всему коду, предлагаемому как часть этого репозитория, который можно определить по
лицензионному уведомлению, предшествующему содержанию ИЛИ/И по его включению в пакет, начинающийся с `com.turingtechnologies.materialscrollbar`.
RecyclerView-FastScroll:
```
Copyright (C) 2016 Tim Malseed
Распространяется под лицензией Apache, версия 2.0 ("Лицензия");
вы не можете использовать этот файл, кроме как в соответствии с Лицензией.
Вы можете получить копию Лицензии по адресу
http://www.apache.org/licenses/LICENSE-2.0
Кроме случаев, когда это требует применимое законодательство или письменное соглашение, программное обеспечение,
распространяемое в рамках Лицензии, предоставляется «как есть» без каких-либо гарантий или условий любого типа,
явных или подразумевающихся.
Увидеть лицензию для получения конкретного языка, регулирующего права и ограничения в рамках Лицензии.
```Launcher 3:
```
Copyright (C) 2010 The Android Open Source Project
Распространяется под лицензией Apache, версия 2.0 ("лицензия");
вы не можете использовать этот файл, кроме как в соответствии с лицензией.
Вы можете получить копию лицензии по адресу
http://www.apache.org/licenses/LICENSE-2.0
Кроме случаев, когда это требует применимое законодательство или письменное соглашение, программное обеспечение,
распространяемое в рамках лицензии, предоставляется «как есть» без каких-либо гарантий или условий любого типа,
явных или подразумевающихся.
Увидеть лицензию для получения конкретного языка, регулирующего права и ограничения в рамках лицензии.
```
```
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )