mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-01-11 20:10:25 +00:00
refactor(player): enhance video controls with modern streaming style
- Moved inline styles to playerStyles.ts for better maintainability - Redesigned player controls for better user experience: - Enhanced skip buttons with rotate animations and semi-transparent backgrounds - Enlarged center play/pause button with improved visibility - Optimized touch targets and spacing for better interaction - Standardized button dimensions and layout Files changed: - src/components/player/controls/PlayerControls.tsx - src/components/player/utils/playerStyles.ts
This commit is contained in:
parent
e2719c373d
commit
698456c205
4 changed files with 34 additions and 9 deletions
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
|
|
@ -1,2 +1,3 @@
|
||||||
{
|
{
|
||||||
|
"java.compile.nullAnalysis.mode": "automatic"
|
||||||
}
|
}
|
||||||
|
|
@ -726,7 +726,7 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||||
|
|
||||||
DefaultRenderersFactory renderersFactory =
|
DefaultRenderersFactory renderersFactory =
|
||||||
new DefaultRenderersFactory(getContext())
|
new DefaultRenderersFactory(getContext())
|
||||||
.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER)
|
.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF)
|
||||||
.setEnableDecoderFallback(true)
|
.setEnableDecoderFallback(true)
|
||||||
.forceEnableMediaCodecAsynchronousQueueing();
|
.forceEnableMediaCodecAsynchronousQueueing();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -148,15 +148,29 @@ export const PlayerControls: React.FC<PlayerControlsProps> = ({
|
||||||
|
|
||||||
{/* Center Controls (Play/Pause, Skip) */}
|
{/* Center Controls (Play/Pause, Skip) */}
|
||||||
<View style={styles.controls}>
|
<View style={styles.controls}>
|
||||||
|
{/* Left Skip Button */}
|
||||||
<TouchableOpacity onPress={() => skip(-10)} style={styles.skipButton}>
|
<TouchableOpacity onPress={() => skip(-10)} style={styles.skipButton}>
|
||||||
<Ionicons name="play-back" size={24} color="white" />
|
<View style={{ transform: [{ rotate: '-90deg' }] }}>
|
||||||
|
<Ionicons name="reload-outline" size={28} color="white" />
|
||||||
|
</View>
|
||||||
<Text style={styles.skipText}>10</Text>
|
<Text style={styles.skipText}>10</Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
|
|
||||||
|
{/* Play/Pause Button */}
|
||||||
<TouchableOpacity onPress={togglePlayback} style={styles.playButton}>
|
<TouchableOpacity onPress={togglePlayback} style={styles.playButton}>
|
||||||
<Ionicons name={paused ? "play" : "pause"} size={40} color="white" />
|
<Ionicons
|
||||||
|
name={paused ? "play" : "pause"}
|
||||||
|
size={46}
|
||||||
|
color="white"
|
||||||
|
style={{ opacity: 0.9 }}
|
||||||
|
/>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
|
|
||||||
|
{/* Right Skip Button */}
|
||||||
<TouchableOpacity onPress={() => skip(10)} style={styles.skipButton}>
|
<TouchableOpacity onPress={() => skip(10)} style={styles.skipButton}>
|
||||||
<Ionicons name="play-forward" size={24} color="white" />
|
<View style={{ transform: [{ rotate: '90deg' }] }}>
|
||||||
|
<Ionicons name="reload-outline" size={28} color="white" />
|
||||||
|
</View>
|
||||||
<Text style={styles.skipText}>10</Text>
|
<Text style={styles.skipText}>10</Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
</View>
|
</View>
|
||||||
|
|
|
||||||
|
|
@ -100,28 +100,38 @@ export const styles = StyleSheet.create({
|
||||||
controls: {
|
controls: {
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
justifyContent: 'center',
|
justifyContent: 'space-between',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
gap: 40,
|
|
||||||
left: 0,
|
left: 0,
|
||||||
right: 0,
|
right: 0,
|
||||||
top: '50%',
|
top: '50%',
|
||||||
transform: [{ translateY: -30 }],
|
transform: [{ translateY: -30 }],
|
||||||
|
paddingHorizontal: 40,
|
||||||
zIndex: 1000,
|
zIndex: 1000,
|
||||||
},
|
},
|
||||||
playButton: {
|
playButton: {
|
||||||
justifyContent: 'center',
|
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
padding: 10,
|
justifyContent: 'center',
|
||||||
|
backgroundColor: 'rgba(255, 255, 255, 0.2)',
|
||||||
|
borderRadius: 40,
|
||||||
|
padding: 15,
|
||||||
|
width: 80,
|
||||||
|
height: 80,
|
||||||
},
|
},
|
||||||
skipButton: {
|
skipButton: {
|
||||||
|
flexDirection: 'column',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
|
backgroundColor: 'rgba(0, 0, 0, 0.5)',
|
||||||
|
borderRadius: 8,
|
||||||
|
padding: 12,
|
||||||
|
width: 60,
|
||||||
},
|
},
|
||||||
skipText: {
|
skipText: {
|
||||||
color: 'white',
|
color: 'white',
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
marginTop: 2,
|
fontWeight: '600',
|
||||||
|
marginTop: 4,
|
||||||
},
|
},
|
||||||
bottomControls: {
|
bottomControls: {
|
||||||
gap: 12,
|
gap: 12,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue