音乐下拉组件

更新时间:2022-01-05 02:55:23下载pdf

MusicDrawer 下拉容器组件,可以传入一个数据数组,给定一个选中的 index,组件内部实现选中和取消,并且可以从外部可以监听到 index 值的变化进行操作。

MusicDrawer

  • 未选中状态:

    音乐下拉组件
  • 不均分:

    音乐下拉组件
  • 自定义样式:

    音乐下拉组件

组件公有属性

字段名 类型 描述 默认值
height Number 组件默认高度 102
styles Object 总样式对象
value Array 数据 []
activeIndex Number 展开默认index []
onPress ()=>void 点击事件
renderActiveContent (val: string number) => ReactNode
onChangeIndex (index: number) => void; 监听index变化事件 []
animateDuration number 动画时间 300
animateEasing ‘linear’ ‘bounce’ ‘ease’ ‘quad’ 动画变化过程 ‘linear’

styles 属性类型

字段名 类型 描述 默认值
containerStyle StyleProp 容器样式
contentStyle StyleProp 内容样式
titleStyle StyleProp 标题样式
subTitleStyle StyleProp 副标题样式
leftIconStyle StyleProp 左侧icon样式
rightIconStyle StyleProp 右侧icon样式
leftIconBoxStyle StyleProp 左侧icon容器样式
rightIconBoxStyle StyleProp 右侧icon容器样式

value 属性类型

字段名 类型 描述 默认值
id String 每个内容对应key
leftIconSource ImageSourcePropType 左侧图标源
rightIconSource Object 右侧图标源 ,是一个对象
title String 主标题内容
subTitle String 副标题内容

rightIconSource 属性类型

字段名 类型 描述 默认值
startIcon ImageSourcePropType 右侧开始图标源
stopIcon ImageSourcePropType 右侧暂停图标源
normalIcon ImageSourcePropType 右侧图标不分开始暂停,统一图标源

使用示例

import React, { useState } from 'react';
import { View, StyleSheet } from 'react-native';
import { MusicDrawer } from '@tuya/tuya-panel-lamp-sdk';
import { TYText } from 'tuya-panel-kit';
import Res from './res';

const MusicDrawers: React.FC = () => {
  const videoListData = ['multi', 'single'];
  const [activeVideoIndex, setActiveVideoIndex] = useState(-1);
  const DrawerData = videoListData.map((item, index) => ({
    id: item,
    leftIconSource: Res[`mode${index + 1}`],
    title: `${getLang('mode')}${index}`,
    rightIconSource: {
      stopIcon: Res.stopIconLight,
      startIcon: Res.startIconLight,
    },
  }));

  const renderActiveContent = (key: string) => {
    if (key === 'multi') {
      return (
        <View style={styles.imgCard} pointerEvents="none">
          <TYText style={{ padding: 20 }}>{getLang('drawerContent')}</TYText>
        </View>
      );
    }
    return (
      <View style={{ height: 50 }} pointerEvents="none">
        <TYText style={{ padding: 20 }}>{`${getLang('drawerContent')}2`}</TYText>
      </View>
    );
  };

  return (
    <View style={styles.container}>
        <MusicDrawer
          value={DrawerData}
          styles={{
            containerStyle: styles.videoContainer,
            contentStyle: styles.videoContent,
            titleStyle: styles.text,
            rightIconBoxStyle: styles.musicBtn,
            leftIconBoxStyle: styles.videoImg,
          }}
          activeIndex={activeVideoIndex}
          onPress={() => console.log('press')}
          onChangeIndex={setActiveVideoIndex}
          height={100}
          renderActiveContent={renderActiveContent}
        />
    </ScrollView>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  imgCard: {
    height: 200,
    overflow: 'hidden',
    width: '100%',
  },
  musicBtn: {
    backgroundColor: 'rgba(255,255,255,0.1)',
    borderRadius: 19,
    borderWidth: 0,
    marginRight: 24,
  },
  text: { fontSize: 18 },
  title: {
    marginVertical: 10,
    paddingLeft: 15,
  },
  videoContainer: {
    borderRadius: 16,
    marginBottom: 16,
  },
  videoContent: {
    backgroundColor: '#fff',
    borderRadius: 16,
    paddingLeft: 14,
  },
  videoImg: {
    height: 52,
    marginHorizontal: 12,
    width: 52,
  },
});

export default MusicDrawers;