androidapp开发音量调节中实现拖动条和滑动条和音频管理器audiomanager讲解及实战(超详细附源码和演示视频)(代码片段)

showswoller showswoller     2023-04-01     783

关键词:

需要源码请点赞关注收藏后评论区留下QQ~~~

一、拖动条和滑动条

拖动条SeekBar继承自进度条ProgressBar,它与进度条的不同之处在于,进度条只能在代码中修改进度值,不能由用户改变进度值,拖动条不仅可以在代码中修改进度值,还可以由用户拖动操作改变进度值,在播放音频和视频时,用户通过拖动条控制播放器快进或快退到指定位置,然后从新位置开始播放,除此之外,拖动条还可以调节音量大小,屏幕亮度,字体大小等

尽管拖动条在多数情况下够用了,但它有一个毛病,拖动之后用户不能直观的看到当前进度值是多少,为此Android设计了全新的滑动条空间Slider,首先要增加以下配置

implementaion 'com.google.android.materia:material:1.4.0'

运行效果如下 可以手动点击控制音量

 代码如下

Java类

package com.example.audio;

import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.slider.Slider;

public class SliderActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_slider);
        SeekBar sb_progress = findViewById(R.id.sb_progress);
        sb_progress.setOnSeekBarChangeListener(mSeekListener); // 设置拖动条的拖动监听器
        Slider sl_progress = findViewById(R.id.sl_progress);
        sl_progress.addOnSliderTouchListener(mSliderListener); // 设置滑动条的触摸监听器
    

    private SeekBar.OnSeekBarChangeListener mSeekListener = new SeekBar.OnSeekBarChangeListener() 
        // 在进度变更时触发。第三个参数为true表示用户拖动,为false表示代码设置进度
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 

        // 在开始拖动进度时触发
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) 

        // 在停止拖动进度时触发
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) 
            Toast.makeText(SliderActivity.this, "您选择的进度是"+seekBar.getProgress(),
                    Toast.LENGTH_SHORT).show();
        
    ;

    private Slider.OnSliderTouchListener mSliderListener = new Slider.OnSliderTouchListener() 
        // 在开始滑动进度时触发
        @Override
        public void onStartTrackingTouch(Slider slider) 

        // 在停止滑动进度时触发
        @Override
        public void onStopTrackingTouch(Slider slider) 
            Toast.makeText(SliderActivity.this, "您选择的进度是"+slider.getValue(),
                    Toast.LENGTH_SHORT).show();
        
    ;

 XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:gravity="center"
        android:text="下面是拖动条"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <SeekBar
        android:id="@+id/sb_progress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:max="100"
        android:progress="50"
        android:thumb="@drawable/seekbar_point" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:gravity="center"
        android:text="下面是来自MaterialDesign库的滑动条"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <com.google.android.material.slider.Slider
        android:id="@+id/sl_progress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:stepSize="1"
        android:valueFrom="0"
        android:valueTo="100"
        android:value="0" />

</LinearLayout>

二、音频管理器

Android只有一个麦克风,却管理着6种铃声,分别是通话音,系统音,铃音,闹钟音,通知音等

管理这些铃声音量的工具是音频管理器AudioManager 下面是它的常用方法

getStreamMaxVolume 获取指定类型铃声的最大音量

getStreamVolume 获取指定类型铃声的当前音量

getRingerMode 获取指定类型铃声的响铃模式

音量调整效果如下 这个设置页面不但允许通过拖动条将音量直接调整到目标值,还允许通过加减按钮逐级调大或者调小音量

可以拖动条也可以点击按钮来调节

 

 代码如下

Java类

package com.example.audio;

import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

import androidx.appcompat.app.AppCompatActivity;

public class AudioManagerActivity extends AppCompatActivity implements OnSeekBarChangeListener, OnClickListener 
    private static final String TAG = "VolumeManagerActivity";
    private SeekBar sb_voice, sb_system, sb_ring, sb_music, sb_alarm, sb_notify;
    private ImageView iv_volumn_up, iv_system_up, iv_ring_up, iv_music_up, iv_alarm_up, iv_notify_up;
    private ImageView iv_volumn_down, iv_system_down, iv_ring_down, iv_music_down, iv_alarm_down, iv_notify_down;
    private int[] mStreamType =  // 音频流类型数组
            AudioManager.STREAM_VOICE_CALL, AudioManager.STREAM_SYSTEM,
            AudioManager.STREAM_RING, AudioManager.STREAM_MUSIC,
            AudioManager.STREAM_ALARM, AudioManager.STREAM_NOTIFICATION;
    private int[] mMaxVolume = 0, 0, 0, 0, 0, 0; // 最大音量数组
    private int[] mNowVolume = 0, 0, 0, 0, 0, 0; // 当前音量数组
    private SeekBar[] mSeekBar =  // 拖动条的控件数组
            sb_voice, sb_system, sb_ring,
            sb_music, sb_alarm, sb_notify;
    private int[] mStreamRes =  // 拖动条的资源编号数组
            R.id.sb_voice, R.id.sb_system, R.id.sb_ring,
            R.id.sb_music, R.id.sb_alarm, R.id.sb_notify;
    private ImageView[] mAddView =  // 增大音量按钮的控件数组
            iv_volumn_up, iv_system_up, iv_ring_up,
            iv_music_up, iv_alarm_up, iv_notify_up;
    private int[] mAddRes =  // 增大音量按钮的资源编号数组
            R.id.iv_volumn_up, R.id.iv_system_up, R.id.iv_ring_up,
            R.id.iv_music_up, R.id.iv_alarm_up, R.id.iv_notify_up;
    private ImageView[] mDelView =  // 减小音量按钮的控件数组
            iv_volumn_down, iv_system_down, iv_ring_down,
            iv_music_down, iv_alarm_down, iv_notify_down;
    private int[] mDelRes =  // 减小音量按钮的资源编号数组
            R.id.iv_volumn_down, R.id.iv_system_down, R.id.iv_ring_down,
            R.id.iv_music_down, R.id.iv_alarm_down, R.id.iv_notify_down;
    private int SEEK_BAR = 1, ADD_VIEW = 2, DEL_VIEW = 3;
    private AudioManager mAudioMgr; // 声明一个音频管理器对象

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_audio_manager);
        // 从布局文件中依次获取各音量类型的拖动条、增大音量按钮、减小音量按钮
        for (int i = 0; i < mStreamType.length; i++) 
            mSeekBar[i] = findViewById(mStreamRes[i]);
            mAddView[i] = findViewById(mAddRes[i]);
            mDelView[i] = findViewById(mDelRes[i]);
        
        setStreamVolume(); // 设置各音量类型的拖动条进度
        for (int i = 0; i < mStreamType.length; i++) 
            // 给各音量类型的拖动条设置拖动变更监听器
            mSeekBar[i].setOnSeekBarChangeListener(this);
            // 给各音量类型的增大音量按钮设置点击监听器
            mAddView[i].setOnClickListener(this);
            // 给各音量类型的减小音量按钮设置点击监听器
            mDelView[i].setOnClickListener(this);
        
    

    // 设置各音量类型的拖动条进度
    void setStreamVolume() 
        // 从系统服务中获取音频管理器
        mAudioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        for (int i = 0; i < mStreamType.length; i++) 
            int type = mStreamType[i];
            // 获取指定音频类型的最大音量
            mMaxVolume[i] = mAudioMgr.getStreamMaxVolume(type);
            // 获取指定音频类型的当前音量
            mNowVolume[i] = mAudioMgr.getStreamVolume(type);
            // 设置拖动条的音量大小进度
            mSeekBar[i].setProgress(mSeekBar[i].getMax() * mNowVolume[i] / mMaxVolume[i]);
        
    

    // 在进度变更时触发。第三个参数为true表示用户拖动,为false表示代码设置进度
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 

    // 在开始拖动进度时触发
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) 

    // 在停止拖动进度时触发
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) 
        Log.d(TAG, "当前进度为:" + seekBar.getProgress() + ", 最大进度为" + seekBar.getMax());
        int index = getArrayIndex(seekBar.getId(), SEEK_BAR);
        int type = mStreamType[index];
        int volume = mMaxVolume[index] * seekBar.getProgress() / seekBar.getMax();
        Log.d(TAG, "volume=" + volume + ", last volume=" + mNowVolume[index] + ", max volume=" + mMaxVolume[index]);
        if (volume != mNowVolume[index]) 
            mNowVolume[index] = volume;
            // 根据拖动位置,计算并设置拖动条的当前进度
            seekBar.setProgress(seekBar.getMax() * mNowVolume[index] / mMaxVolume[index]);
        
        // 设置该音频类型的当前音量
        mAudioMgr.setStreamVolume(type, volume, AudioManager.FLAG_PLAY_SOUND);
    

    @Override
    public void onClick(View v) 
        int add_index = getArrayIndex(v.getId(), ADD_VIEW);
        int del_index = getArrayIndex(v.getId(), DEL_VIEW);
        if (add_index != -1)  // 点击了增大音量按钮
            SeekBar seekBar = mSeekBar[add_index];
            if (mNowVolume[add_index] < mMaxVolume[add_index]) 
                mNowVolume[add_index] = mNowVolume[add_index] + 1;
                // 设置拖动条的音量大小进度
                seekBar.setProgress(seekBar.getMax() * mNowVolume[add_index] / mMaxVolume[add_index]);
                // 把该音频类型的当前音量调大一级
                mAudioMgr.adjustStreamVolume(mStreamType[add_index], AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND);
            
         else if (del_index != -1)  // 点击了减小音量按钮
            SeekBar seekBar = mSeekBar[del_index];
            if (mNowVolume[del_index] > 0) 
                mNowVolume[del_index] = mNowVolume[del_index] - 1;
                // 设置拖动条的音量大小进度
                seekBar.setProgress(seekBar.getMax() * mNowVolume[del_index] / mMaxVolume[del_index]);
                // 把该音频类型的当前音量调小一级
                mAudioMgr.adjustStreamVolume(mStreamType[del_index], AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
            
        
    

    // 根据资源编号与类型寻找它在对应数组中的位置
    private int getArrayIndex(int resid, int type) 
        int index = -1;
        if (type == SEEK_BAR)  // 这是拖动条
            for (int i = 0; i < mSeekBar.length; i++) 
                if (mSeekBar[i].getId() == resid) 
                    index = i;
                    break;
                
            
         else if (type == ADD_VIEW)  // 这是增大音量按钮
            for (int i = 0; i < mAddView.length; i++) 
                if (mAddView[i].getId() == resid) 
                    index = i;
                    break;
                
            
         else if (type == DEL_VIEW)  // 这是减小音量按钮
            for (int i = 0; i < mDelView.length; i++) 
                if (mDelView[i].getId() == resid) 
                    index = i;
                    break;
                
            
        
        return index;
    


XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="bottom|center_horizontal"
                    android:text="调节通话音量"
                    android:textColor="#000000"
                    android:textSize="17sp" />

                <ImageView
                    android:id="@+id/iv_volumn_down"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="30dp"
                    android:src="@drawable/volumn_down" />

                <ImageView
                    android:id="@+id/iv_volumn_up"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="50dp"
                    android:src="@drawable/volumn_up" />
            </LinearLayout>

            <SeekBar
                android:id="@+id/sb_voice"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:thumb="@drawable/seekbar_point" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="bottom|center_horizontal"
                    android:text="调节系统音量"
                    android:textColor="#000000"
                    android:textSize="17sp" />

                <ImageView
                    android:id="@+id/iv_system_down"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="30dp"
                    android:src="@drawable/volumn_down" />

                <ImageView
                    android:id="@+id/iv_system_up"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="50dp"
                    android:src="@drawable/volumn_up" />
            </LinearLayout>

            <SeekBar
                android:id="@+id/sb_system"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:thumb="@drawable/seekbar_point" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="bottom|center_horizontal"
                    android:text="调节铃声音量"
                    android:textColor="#000000"
                    android:textSize="17sp" />

                <ImageView
                    android:id="@+id/iv_ring_down"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="30dp"
                    android:src="@drawable/volumn_down" />

                <ImageView
                    android:id="@+id/iv_ring_up"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="50dp"
                    android:src="@drawable/volumn_up" />
            </LinearLayout>

            <SeekBar
                android:id="@+id/sb_ring"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:thumb="@drawable/seekbar_point" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="bottom|center_horizontal"
                    android:text="调节音乐音量"
                    android:textColor="#000000"
                    android:textSize="17sp" />

                <ImageView
                    android:id="@+id/iv_music_down"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="30dp"
                    android:src="@drawable/volumn_down" />

                <ImageView
                    android:id="@+id/iv_music_up"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="50dp"
                    android:src="@drawable/volumn_up" />
            </LinearLayout>

            <SeekBar
                android:id="@+id/sb_music"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:thumb="@drawable/seekbar_point" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="bottom|center_horizontal"
                    android:text="调节闹钟音量"
                    android:textColor="#000000"
                    android:textSize="17sp" />

                <ImageView
                    android:id="@+id/iv_alarm_down"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="30dp"
                    android:src="@drawable/volumn_down" />

                <ImageView
                    android:id="@+id/iv_alarm_up"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="50dp"
                    android:src="@drawable/volumn_up" />
            </LinearLayout>

            <SeekBar
                android:id="@+id/sb_alarm"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:thumb="@drawable/seekbar_point" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="bottom|center_horizontal"
                    android:text="调节通知音量"
                    android:textColor="#000000"
                    android:textSize="17sp" />

                <ImageView
                    android:id="@+id/iv_notify_down"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="30dp"
                    android:src="@drawable/volumn_down" />

                <ImageView
                    android:id="@+id/iv_notify_up"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="50dp"
                    android:src="@drawable/volumn_up" />
            </LinearLayout>

            <SeekBar
                android:id="@+id/sb_notify"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:thumb="@drawable/seekbar_point" />
            
        </LinearLayout>
    </ScrollView>

</LinearLayout>

创作不易 觉得有帮助请点赞关注收藏~~~

android亮度调节功能开发思路整理(代码片段)

...droid亮度调节分为三个层次,分别是:Android系统亮度调节AndroidApp亮度调节Android当前屏幕(Window)亮度调节一、Android系统亮度调节Android系统亮度调节全局性最高,常见于系统设置中的亮度设置项。Android中 查看详情

unity中实现嵌套滑动框(代码片段)

一:效果演示二:前言Unity中如果两个ScrollRect嵌套在一起,后面的会挡住前面的,当在二级列表区域拖动时导致一级列表无法滑动三:实现原理根据滑动的方向,来进行事件的渗透传递,如果当前滑动... 查看详情

qt滑动条设计与实现

...的滑动条控件,所以自己写了一个,能够实现亮度调节、音量调节等功能。效果如下图:主要设计思路:有些调节功能如对比度是有负值的,所以需要能对滑动条的数值范围进行设置,不局限于0~100鼠标拖动时滑动块能随着鼠标... 查看详情

如何在 ListView 中实现 Android 4.0 之类的滑动以关闭功能?

...tView?【发布时间】:2012-03-1605:12:24【问题描述】:我正在开发一个应用程序,我想在其中实现ListView中的滑动关闭功能-类似于我们在Android4.0的通知栏、最近应用程序列表或浏览器选项卡中看到的内容。 查看详情

如何在 UIScrollView 中实现可拖动的 UIView 子类?

】如何在UIScrollView中实现可拖动的UIView子类?【英文标题】:HowdoIimplementadraggableUIViewsubclasswithinaUIScrollView?【发布时间】:2009-10-2613:20:03【问题描述】:我有一个相当棘手的滚动场景需要排序。我有一个包含两个子UIView子类的单... 查看详情

在 Angular 2 中实现滑动导航的最佳方式是啥?

】在Angular2中实现滑动导航的最佳方式是啥?【英文标题】:WhatisthebestwaytoimplementswipenavigationinAngular2?在Angular2中实现滑动导航的最佳方式是什么?【发布时间】:2017-07-2408:20:03【问题描述】:我是Angular2的新手,正在寻找一种方... 查看详情

在下面的类中实现带有屏幕限制的 Imageview Rotation

...wclass【发布时间】:2016-02-2518:09:57【问题描述】:我正在开发一个用于图像缩放、拖动、旋转到屏幕限制之外的android应用程序。首先,我必须以编程方式使图像适合整个屏幕,并对图像执行缩放、旋转、拖动操作到屏幕边界之... 查看详情

滑动 UI 就像下面提到的图像

...:57:56【问题描述】:根据我的项目要求,我想在我的活动中实现滑动UI,如下图所示。如下图所示,我们可以通过拖动向下箭头图像滑动。我想在我的活动中实现相同的功能。怎么做?任何的想法?或任何参考资料?请帮助我从1... 查看详情

如何使用 Rx 在 Angular 2 中实现可拖动的 div

】如何使用Rx在Angular2中实现可拖动的div【英文标题】:HowtoimplementadraggabledivinAngular2usingRx【发布时间】:2016-07-1609:19:02【问题描述】:我一直在尝试使用Angular2让可拖动的div工作。我使用thisexamplefromtheangular2-examplesrepo作为起点,... 查看详情

在 Qt 中实现滑动实时二维绘图

】在Qt中实现滑动实时二维绘图【英文标题】:Implementingslidingrealtime2DplotinQt【发布时间】:2015-04-0315:39:43【问题描述】:我正在从管道内移动的超声波设备获取流式测量数据,我想绘制这些测量值的滑动/实时图。Y轴代表管道周... 查看详情

串口屏开发之滑块控件的使用总结——如何通过滑动滑块实现进度条和文本的联动效果

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来!《QT开发实战》《嵌入式通用开发实战》《嵌入式Linux开发实战 查看详情

如何在导航栏菜单中实现平滑的向下滑动效果

】如何在导航栏菜单中实现平滑的向下滑动效果【英文标题】:HowtoachievesmootheslidedowneffectinNavbarMenu【发布时间】:2018-03-2404:43:24【问题描述】:目标-我想在一些滚动后实现向下滑动(用于导航栏)效果。我实际上实现了我想要... 查看详情

esp32ec11制作电脑音量调节旋钮(代码片段)

前言目前电脑键盘上的音量调节按键(音量+、音量-、静音),通常都是以组合键的形式生效(Fn+F123)。有时打开一个视频,声音过大或过小。想要迅速调节音量,却发现找音量调节按键都要找... 查看详情

iOS:访问设备硬件音量控制

】iOS:访问设备硬件音量控制【英文标题】:iOS:Accessingdevicehardwareaudiovolumecontrol【发布时间】:2012-02-2313:47:08【问题描述】:我已经在我的应用程序中实现了这个流媒体(https://github.com/DigitalDJ/AudioStreamer),它运行得非常好,但... 查看详情

在android蜂窝webview/webkit中实现水平/垂直手指滑动滚动?

】在android蜂窝webview/webkit中实现水平/垂直手指滑动滚动?【英文标题】:Implementinghorizontal/verticalfingerswipescrollinginandroidhoneycombwebview/webkit?【发布时间】:2011-12-0414:42:51【问题描述】:我正计划实现基于WebView的Honeycomb平板应用程... 查看详情

react+ts中实现鼠标水平拖动,横向滚动|mouseclickanddraginsteadofhorizontalscrollbar(代码片段)

背景最近接到一个新需求,就是有一个流程的东西,而这个流程可能会比较多,那么在水平就需要scroll-x,表面上使用触摸板双指即可拖动,但是产品和测试讨论之后觉得鼠标也需要拖拽滑动。但鼠标可以通过... 查看详情

如何在swift 5中实现滑动中的两个垂直按钮以删除

】如何在swift5中实现滑动中的两个垂直按钮以删除【英文标题】:Howcanimplementtwoverticalbuttoninswipetodeleteinswift5【发布时间】:2020-07-0106:08:56【问题描述】:我正在尝试实现滑动删除功能,有两个选项,一个是删除,另一个是编辑... 查看详情

录制的视频主题音量能减吗

对于录制的视频,主题音量是可以减小的,你只需要在视频编辑软件中进行音量调整即可,例如将调高的音量调整为原本的一半或更少。参考技术A是可以的,在录制视频的过程中,可以通过调整软件的配置,调节录制视频的主... 查看详情