build.gradle
в корневой директории проекта,allprojects {
repositories {
maven {
url 'https://s01.oss.sonatype.org/content/repositories/releases/'
}
}
}
build.gradle
модуля entry,dependencies {
implementation('com.gitee.chinasoft_ohos:flyoutmenu:1.0.0')
......
}
Проект можно запустить непосредственно в SDK6 с DevEco Studio 2.2 beta1.
Если проект не запускается, удалите файлы .gradle
, .idea
, build
, gradle
, build.gradle
, создайте новый проект в соответствии со своей версией и скопируйте соответствующие файлы нового проекта в корневую директорию.
Добавьте пользовательский view в XML следующим образом:
<org.zakariya.flyoutmenu.FlyoutMenuView
ohos:id="$+id:toolSelectorFlyoutMenu"
ohos:width="match_content"
ohos:height="match_content"
ohos:padding="$float:flyout_menu_button_padding"
ohos:right_margin="$float:flyout_menu_right_margin"
hap:fmButtonSize="$float:flyout_menu_button_size"
hap:fmItemHeight="$float:flyout_menu_item_height"
hap:fmItemWidth="$float:flyout_menu_item_width"
hap:fmMenuAnchor="top"
hap:fmSelectedItemBackgroundColor="@color/toolSelectionBackgroundColor"
/>
```Полный пример использования:
```java
public class EmojiFlyoutMenu {
/**
* Преобразование Unicode в emoji
*/
public static String uni2emoji(String unicode16) {
if (unicode16.length() <= 0) {
return null;
}
BigInteger bi = new BigInteger(unicode16, 16);
String biemoji = bi.toString(10);
Integer integer = Integer.valueOf(biemoji);
String emoji = new String(Character.toChars(integer));
return emoji;
}
public static class MenuItem extends FlyoutMenuView.MenuItem {
String emojiString;
Paint paint;
int position;
public MenuItem(Context context, int id, String emojiCode, float size, int color, int position) {
super(context, id); // type = 1
this.emojiString = emojiCode;
this.position = position;
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(new Color(0xFFA30303));
paint.setTextSize(96); //(int) size);106
paint.setStyle(Paint.Style.FILL);
paint.setTextAlign(Paint.Align.CENTER);
}
public String getEmojiCode() {
return emojiString;
}
@Override
public void onDraw(Canvas canvas, RectFloat bounds, float degreeSelected) {
canvas.drawText(paint, uni2emoji(emojiString), bounds.getCenter().getPointX(), (bounds.bottom + bounds.top) / 2 + paint.descent() + 5); //uni2emoji(emojiString)
}
}
public static class ButtonRenderer extends FlyoutMenuView.ButtonRenderer { // Можно установить цвет внешней окружности
private int emojiCode;
private String emojiString;
private Paint paint;
private Paint paint1;
private TextPaint textPaint;
public ButtonRenderer(String emojiCode, float size, int color) {
super();
this.setEmojiCode(emojiCode);
paint1 = new Paint();
paint1.setColor(new Color(0xFFA30303));
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(new Color(0xFFA30303));
paint.setTextSize(96);
paint.setTextAlign(Paint.Align.CENTER);
paint.setStyle(Paint.Style.FILL);
}
}
}
``````java
public String getEmojiCode() {
return emojiString;
}
public void setEmojiCode(String emojiCode) {
this.emojiString = emojiCode;
}
@Override
public void onDrawButtonContent(Canvas canvas, RectFloat buttonBounds, Color buttonColor, float alpha) { // Реализация отрисовки содержимого кнопки
canvas.drawText(paint, uni2emoji(emojiString), buttonBounds.getCenter().getPointX(), buttonBounds.getCenter().getPointY() + paint.descent() + 10); // можно реализовать
}
}
Чтобы использовать вышеуказанный код:
smileyFlyoutMenu = (FlyoutMenuView) findComponentById(ResourceTable.Id_smileyFlyoutMenu);
String[] emojiCodes = { "1f60a", "1f603", "1f601", "1f602", "1f620", "1f61e", "1f630", "1f624" };
ohos.global.resource.ResourceManager resManager = this.getResourceManager();
float fontSizeInMenu = 0; float fontSizeInButton = 0; int color = 0; try { color = resManager.getElement(ResourceTable.Color_smileyMenuCharColor).getInteger(); fontSizeInMenu = resManager.getElement(ResourceTable.Float_smiley_menu_item_size).getFloat() * 2.0f; fontSizeInButton = resManager.getElement(ResourceTable.Float_flyout_menu_button_size).getFloat() * 0.5f; } catch (IOException e) { e.printStackTrace(); } catch (NotExistException e) { e.printStackTrace(); } catch (WrongTypeException e) { e.printStackTrace(); }
List<FlyoutMenuView.MenuItem> menuItems = new ArrayList<>();
for (int i = 0; i < emojiCodes.length; i++) { menuItems.add(new EmojiFlyoutMenu.MenuItem(getContext(), i, emojiCodes[i], fontSizeInMenu, color, i)); }
smileyFlyoutMenu.setLayout(new FlyoutMenuView.GridLayout(2, FlyoutMenuView.GridLayout.UNSPECIFIED)); smileyFlyoutMenu.setAdapter(new FlyoutMenuView.ArrayAdapter<>(menuItems));
final EmojiFlyoutMenu.ButtonRenderer renderer = new EmojiFlyoutMenu.ButtonRenderer(emojiCodes[0], fontSizeInButton, color); smileyFlyoutMenu.setButtonRenderer(renderer);
```markdown
smileyFlyoutMenu = (FlyoutMenuView) findComponentById(ResourceTable.Id_smileyFlyoutMenu);
String[] emojiCodes = {
"1f60a", "1f603", "1f601",
"1f602", "1f620", "1f61e",
"1f630", "1f624"
};
ohos.global.resource.ResourceManager resManager = this.getResourceManager();
``` smileyFlyoutMenu.setSelectionListener(new FlyoutMenuView.SelectionListener() {
@Override
public void onItemSelected(FlyoutMenuView flyoutMenuView, FlyoutMenuView.MenuItem item) {
smileyFlyoutMenuSelectionId = item.getId();
renderer.setEmojiCode(((EmojiFlyoutMenu.MenuItem) item).getEmojiCode());
}
@Override
public void onDismissWithoutSelection(FlyoutMenuView flyoutMenuView) {
}
});
Код проверен CodeCheck — ошибок нет.
Код проверен CloudTest — ошибок нет.
Проверка безопасности от вирусов прошла успешно.
Функционал текущей версии демо совпадает с функционалом исходного компонента.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )