伙计们!我有一个问题:)尝试自定义一个开关,例如开关的轮廓将带有边框,在开关的内部,您单击以激活事件的边框也带有边框,但是在一种不会与开关的轮廓边框重叠的方式。由于我没有足够的代表,因此我实际上无法发布图片,因此我希望它足够清楚:)到目前为止,我得到的是:
<?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) 我有这个媒体播放器,其他一切正常,我开始播放歌曲,它通过 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)