小编fun*_*kie的帖子

切换(缩略图和跟踪)Android

伙计们!我有一个问题:)尝试自定义一个开关,例如开关的轮廓将带有边框,在开关的内部,您单击以激活事件的边框也带有边框,但是在一种不会与开关的轮廓边框重叠的方式。由于我没有足够的代表,因此我实际上无法发布图片,因此我希望它足够清楚:)到目前为止,我得到的是:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <size android:height="50dp"/>
    <corners
        android:radius="3dp"/>

    <stroke
        android:width="2dp"
        android:color="@color/wampRed"/>

</shape>


<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/wampRed"/>
    <corners
        android:radius="2dp"/>


</shape>
Run Code Online (Sandbox Code Playgroud)

<

Switch
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/switchButton"
        android:layout_marginBottom="40dp"
        android:textOn=""
        android:thumb="@drawable/shape_track"
        android:track="@drawable/shape_thumb"
        android:layout_marginRight="5dp"
        android:textOff="       "
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@+id/dateOutput"

        />
Run Code Online (Sandbox Code Playgroud)

java xml android

5
推荐指数
1
解决办法
1154
查看次数

SeekTo 不会在 MediaControllerCompat 中触发 onPlaybackStateChanged

我有这个媒体播放器,其他一切正常,我开始播放歌曲,它通过 2 个状态,最后一个是 PlaybackStateCompat.STATE_PLAYING

因此我们可以说回调已注册。问题是每当我触发 SeekBar 侦听器时,该方法seekTo都不会触发onPlaybackStateChanged并且因为这不会发生,所以我无法将 SeekBar 更新为它的新进度。这仅涉及 UI。修改SeekBar进度后,音乐实际上是从进度播放的。更重要的是, trackDurationTextView 也不会更新。当我将拇指拖过搜索栏时,它会改变它的值,但是一旦我松开它,它就会进入初始进度,与搜索栏相同。

这是注册回调的地方。

@Override
    public void onServiceConnected(ComponentName componentName, IBinder service) {
        if (service instanceof MediaPlayerService.ServiceBinder) {
            try {
                mediaController = new MediaControllerCompat(this, ((MediaPlayerService.ServiceBinder) service).getService().getMediaSessionToken());
            } catch (RemoteException e) {
                e.printStackTrace();
            }
            mediaController.registerCallback(mMediaControllerCallback);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是回调的初始化方式:

 private MediaControllerCompat.Callback mMediaControllerCallback = new MediaControllerCompat.Callback() {
        @Override
        public void onPlaybackStateChanged(@NonNull PlaybackStateCompat state) {
            updatePlaybackState(state);
        }

        @Override
        public void onMetadataChanged(MediaMetadataCompat metadata) {
            if (metadata != null) {
                updateMediaDescription(metadata.getDescription());
                updateDuration(metadata);
            }
        } …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer android-mediasession

5
推荐指数
1
解决办法
1927
查看次数