SlideAndDragListView
Это пользовательский компонент ListContainer, который позволяет скользить по меню влево и вправо, а также перетаскивать элементы вверх и вниз для изменения их позиции.
Обзор:
Демонстрация:
Интеграция:
Способ 1: Создайте har-пакет с помощью library и добавьте его в папку libs. В файле entry gradle добавьте следующий код: implementation fileTree(dir: 'libs', include: ['.jar', '.har'])
Способ 2: Добавьте репозиторий mavenCentral() во все проекты. Затем добавьте зависимость: implementation 'io.openharmony.tpc.thirdlib:SlideAndDragListView:1.0.0'
Требования к запуску entry: Запустите DevEco studio и загрузите SDK. Измените версию classpath в файле build.gradle проекта на соответствующую версию (версия, используемая в вашем новом проекте IDE).
Пример:
<com.yydcdut.sdlv.SlideAndDragListView
ohos:id="$+id:lv_edit"
ohos:width="match_parent"
ohos:height="match_parent"
ohos:left_padding="8vp"
ohos:right_padding="8vp">
</com.yydcdut.sdlv.SlideAndDragListView>
/**
* Левое и правое скольжение по меню
*/
public class SlideDragListAbilitySlice extends AbilitySlice implements SlideAndDragListView.OnDragDropListener, SlideAndDragListView.OnSlideListener,
SlideAndDragListView.OnMenuItemClickListener, SlideAndDragListView.OnItemDeleteListener,
SlideAndDragListView.OnItemScrollBackListener {
private SlideAndDragListView mListView;
private Menu mMenu;
private ListItemEnity mDraggedEntity;
private ArrayList<ListItemEnity> mAppList = new ArrayList<>();
private int menuWith = 150, menuHeight = 180, menuBtnHeight = 180, menuBtnWith = 150, marginTop = 25;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_drag_del);
initData();
initMenu();
initUiAndListener();
}
public void initData() {
ListItemEnity listItemEnity = new ListItemEnity();
listItemEnity.setItemLabel("111111");
listItemEnity.setItemImageId(ResourceTable.Media_icon);
mAppList.add(listItemEnity);
listItemEnity = new ListItemEnity();
listItemEnity.setItemLabel("2222222");
listItemEnity.setItemImageId(ResourceTable.Media_icon);
mAppList.add(listItemEnity);
listItemEnity = new ListItemEnity();
listItemEnity.setItemLabel("3333333");
listItemEnity.setItemImageId(ResourceTable.Media_icon);
mAppList.add(listItemEnity);
listItemEnity = new ListItemEnity();
listItemEnity.setItemLabel("4444444");
listItemEnity.setItemImageId(ResourceTable.Media_icon);
mAppList.add(listItemEnity);
listItemEnity = new ListItemEnity();
listItemEnity.setItemLabel("5555555");
listItemEnity.setItemImageId(ResourceTable.Media_icon);
mAppList.add(listItemEnity);
listItemEnity = new ListItemEnity();
listItemEnity.setItemLabel("66666666");
listItemEnity.setItemImageId(ResourceTable.Media_icon);
mAppList.add(listItemEnity);
listItemEnity = new ListItemEnity();
listItemEnity.setItemLabel("7777777");
listItemEnity.setItemImageId(ResourceTable.Media_icon);
mAppList.add(listItemEnity);
}
public void initMenu() {
mMenu = new Menu(true);
ShapeElement shapeElement = new ShapeElement();
shapeElement.setRgbColor(convertColor(0xffff4444));
ShapeElement shapeElementGreen = new ShapeElement();
shapeElementGreen.setRgbColor(convertColor(0xff669900));
ShapeElement shapeElementBlue = new ShapeElement();
shapeElementBlue.setRgbColor(convertColor(0xff0099cc));
ShapeElement shapeElementYellow = new ShapeElement();
shapeElementYellow.setRgbColor(convertColor(0xffff8800));
mMenu.addItem(new MenuItem.Builder().setWidth(menuWith)
.setHeight(menuHeight)
.setMarginTop(marginTop)
*Примечание: в тексте запроса присутствуют фрагменты кода на языке Java, которые не были переведены.* ```
ListItemEnity item = (ListItemEnity) this.getItem(position);
cvh.txtName.setText(item.getItemLabel());
cvh.imgLogo.setPixelMap(item.getItemImageId());
cvh.btnClick.setText(position + "");
cvh.btnClick.setTag(position);
return convertView;
}
class CustomViewHolder {
public Image imgLogo;
public Text txtName;
public Button btnClick;
}
private Component.ClickedListener mOnClickListener = new Component.ClickedListener() {
@Override
public void onClick(Component component) {
Object o = component.getTag();
if (o instanceof Integer) {
new ToastDialog(getContext()).setText("button click-->" + (Integer) o).show();
}
}
};
private int mBeginPosition;
@Override
public void onDragViewStart(int beginPosition) {
mBeginPosition = beginPosition;
mDraggedEntity = mAppList.get(beginPosition);
}
@Override
public void onDragDropViewMoved(int fromPosition, int toPosition) {
}
@Override
public void onDragViewDown(int finalPosition) {
ListItemEnity applicationInfo = mAppList.remove(mBeginPosition);
mAppList.add(finalPosition, applicationInfo);
mListView.setItemProvider(mAdapter);
mListView.getItemProvider().notifyDataChanged();
}
@Override
public void onItemMoveFromTo(int fromPosition, int toPosition) {
//TODO 长按拖动回调
ListItemEnity applicationInfo = mAppList.remove(fromPosition);
mAppList.add(toPosition, applicationInfo);
mListView.getItemProvider().notifyDataChanged();
}
@Override
public void onSlideOpen(Component view, Component parentView, int position, int direction) {
}
@Override
public void onSlideClose(Component view, Component parentView, int position, int direction) {
}
@Override
public int onMenuItemClick(Component v, int itemPosition, int buttonPosition, int direction) {
switch (direction) {
case MenuItem.DIRECTION_LEFT:
switch (buttonPosition) {
case 0:
return Menu.ITEM_NOTHING;
case 1:
return Menu.ITEM_SCROLL_BACK;
}
break;
case MenuItem.DIRECTION_RIGHT:
switch (buttonPosition) {
case 0:
return Menu.ITEM_SCROLL_BACK;
case 1:
return Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP;
}
}
return Menu.ITEM_NOTHING;
}
@Override
public void onItemDeleteAnimationFinished(Component view, int position) {
mAppList.remove(position);
mAdapter.notifyDataChanged();
mListView.getItemProvider().notifyDataSetItemRemoved(position);
mListView.getItemProvider().notifyDataChanged();
}
public RgbColor convertColor(int color) {
int colorInt = color;
int red = (colorInt & 0xff0000) >> 16;
int green = (colorInt & 0x00ff00) >> 8;
int blue = (colorInt & 0x0000ff);
return new RgbColor(red, green, blue);
}
@Override
public void onScrollBackAnimationFinished(Component view, int position) {
}
}
``` Распространяемое по Лицензии программное обеспечение распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых. См. текст Лицензии для ознакомления с конкретными условиями предоставления разрешений и ограничений в рамках Лицензии.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )