Commit 1e8f36a5 by 严久程

课程模块

parent e4369ba4
......@@ -60,6 +60,14 @@ dependencies {
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
kapt 'com.alibaba:arouter-compiler:1.2.2'
implementation 'com.jakewharton:butterknife:8.8.1'
api 'com.dou361.ijkplayer-armv5:jjdxm-ijkplayer-armv5:1.0.0'
api 'com.dou361.ijkplayer-arm64:jjdxm-ijkplayer-arm64:1.0.0'
api 'com.dou361.ijkplayer-x86:jjdxm-ijkplayer-x86:1.0.0'
api 'com.dou361.ijkplayer-x86_64:jjdxm-ijkplayer-x86_64:1.0.0'
api('com.dou361.ijkplayer:jjdxm-ijkplayer:1.0.6') {
exclude group: 'com.android.support', module: 'appcompat-v7'
}
api rootProject.ext.dependencies["ydl-user-router"]
if (rootProject.ext.dev_mode){
//开发时使用
......
......@@ -238,7 +238,7 @@ public class CourseListFragment extends BaseFragment implements PtrHandler, Load
emptyTv.setVisibility(View.VISIBLE);
ivEmptyView.setVisibility(View.VISIBLE);
lvContent.setVisibility(View.GONE);
ivEmptyView.setImageResource(R.drawable.blank);
ivEmptyView.setImageResource(R.drawable.course_blank);
emptyTv.setText("还没有相应的课程哦~");
} else {
lvContent.setVisibility(View.VISIBLE);
......
package com.yidianling.course.bean
import com.yidianling.ydlcommon.data.ShareData
import com.ydl.ydlcommon.bean.ShareData
/**
* @author jiucheng
......
......@@ -495,7 +495,7 @@ class CourseListContainerActivity : BaseActivity(), PtrHandler, LoadMoreHandler
lv_content.visibility = View.GONE
tv_course_list_empty_prompt.visibility = View.VISIBLE
iv_course_list_empty_view.visibility = View.VISIBLE
iv_course_list_empty_view.setImageResource(R.drawable.blank)
iv_course_list_empty_view.setImageResource(R.drawable.course_blank)
tv_course_list_empty_prompt.text = "还没有相应的课程哦~"
v_loading.visibility = View.GONE
}
......
......@@ -17,7 +17,8 @@ import android.widget.LinearLayout
import android.widget.TextView
import com.alibaba.android.arouter.facade.annotation.Route
import com.bumptech.glide.Glide
import com.google.android.exoplayer2.ui.PlayerView
import com.dou361.ijkplayer.widget.PlayStateParams
import com.dou361.ijkplayer.widget.PlayerView
import com.ydl.media.audio.AudioPlayer
import com.ydl.media.audio.utils.PlayProgressUtil
import com.ydl.media.view.PlayTypeEnum
......@@ -31,7 +32,6 @@ import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.ydl.ydlcommon.router.YdlCommonRouterManager
import com.ydl.ydlcommon.utils.ScreenUtil
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.UMEventUtils
import com.ydl.ydlcommon.utils.Utils
import com.ydl.ydlcommon.view.BaseViewHolder
import com.ydl.ydlcommon.view.dialog.CommonDialog
......@@ -579,7 +579,7 @@ class CoursePlayActivity : BaseActivity() {
videoView?.onConfigurationChanged(newConfig)
handler.postDelayed({
if (newConfig.screenHeightDp > newConfig.screenWidthDp) {
videoView?.fullScreenView!!.setImageResource(R.drawable.ico_play_float_full)
videoView?.fullScreenView!!.setImageResource(R.drawable.course_ico_play_float_full)
} else {
videoView?.fullScreenView!!.setImageResource(R.drawable.ico_play_minify)
}
......@@ -595,10 +595,17 @@ class CoursePlayActivity : BaseActivity() {
fun showVideoFloatView(): Boolean {
if (play_type == 0) {
if (YDLMusicHelper.isCoursePlaying()) {
YDLMusicHelper.cover = courPlayBean?.courseExtra?.pic
YDLMusicHelper.name = courPlayBean?.courseExtra?.doctorName
// if (YDLMusicHelper.isCoursePlaying()) {
// YDLMusicHelper.cover = courPlayBean?.courseExtra?.pic
// YDLMusicHelper.name = courPlayBean?.courseExtra?.doctorName
// }
if (AudioPlayer.get().isPlaying && PlayerFloatHelper.playingType == PlayTypeEnum.PLAY_TYPE_COURSE) {
AudioPlayer.get().playMusic?.coverPath=courPlayBean?.courseExtra?.pic
AudioPlayer.get().playMusic?.artist=courPlayBean?.courseExtra?.doctorName
}
} else {
if (videoView?.onBackPressed() == true) {
return false
......
......@@ -8,6 +8,7 @@ import com.yidianling.common.tools.RxDeviceTool
import com.yidianling.common.tools.RxNetTool
import com.yidianling.course.bean.CourseExtraBean
import com.yidianling.course.bean.CourseMediaBean
import com.yidianling.course.widget.HPlayView
import com.yidianling.ydlcommon.bean.CourseExtraBean
import com.yidianling.ydlcommon.bean.CourseMediaBean
import com.yidianling.ydlcommon.dialog.CommonDialog
......
......@@ -8,6 +8,9 @@ import android.view.View
import android.widget.RelativeLayout
import com.dou361.ijkplayer.widget.PlayStateParams
import com.dou361.ijkplayer.widget.PlayerView
import com.ydl.media.audio.utils.PlayProgressUtil
import com.ydl.media.view.PlayTypeEnum
import com.ydl.media.view.PlayerFloatHelper
import com.ydl.ydl_image.module.GlideApp
import com.ydl.ydlcommon.view.dialog.CommonDialog
import com.yidianling.course.R
......@@ -52,7 +55,7 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
@SuppressLint("InvalidWakeLockTag")
private constructor(context: CoursePlayActivity, playMoudle: Int) : super(context) {
this.playMoudle = playMoudle
View.inflate(context, R.layout.view_course_play_item, this)
View.inflate(context, R.layout.course_view_course_play_item, this)
activity = context
initView()
......@@ -77,7 +80,7 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
if (isVideoPlaying) {
var time = activity?.videoView?.currentPosition ?: 0
if (time < 3000) return
UtilH.saveProgress(context, videoUrl, time)
PlayProgressUtil.saveProgress(context, videoUrl, time)
}
}
}, 1000, 1000)
......@@ -104,7 +107,7 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
wakeLock!!.acquire()
}
activity?.videoView?.onResume()
var hisTime1 = UtilH.getProgress(context, videoUrl)
var hisTime1 = PlayProgressUtil.getProgress(context, videoUrl)
activity?.videoView?.seekTo(hisTime1)
}
......@@ -149,14 +152,15 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
}
}
if (canPlay) {
YDLMusicHelper.playingType = YDLMusicHelper.PLAY_TYPE_COURSE
PlayerFloatHelper.playingType=PlayTypeEnum.PLAY_TYPE_COURSE
var url = playList[index].url
url = url.replace("https", "http")
videoUrl = url
var hisTime = UtilH.getProgress(context, url)
var hisTime = PlayProgressUtil.getProgress(context, url)
try {
activity?.videoView = PlayerView(activity)
.setScaleType(PlayStateParams.fitparent)
......@@ -194,7 +198,7 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
if (what == PlayStateParams.STATE_COMPLETED) {
isVideoPlaying = false
UtilH.saveProgress(this@CoursePlayItemViewVideo.activity, videoUrl, 0)
PlayProgressUtil.saveProgress(this@CoursePlayItemViewVideo.activity, videoUrl, 0)
if (playList.size - 1 > this@CoursePlayItemViewVideo.index) {
//播放下一曲
play(this@CoursePlayItemViewVideo.index + 1)
......
package com.yidianling.course.courseSearch
import android.annotation.SuppressLint
import android.support.v7.widget.LinearLayoutManager
import android.text.TextUtils
import android.util.Log
......@@ -7,22 +8,22 @@ import android.view.View
import android.view.WindowManager
import android.widget.ImageView
import com.alibaba.android.arouter.facade.annotation.Route
import com.ydl.base_module.ui.searchbarview.SearchBarView
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.ydl_image.config.SimpleImageOpConfiger
import com.ydl.ydl_image.listener.YDLImageRecyclerOnScrollListener
import com.ydl.ydl_image.manager.YDLImageCacheManager
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.bean.ShareData
import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.yidianling.common.tools.ToastUtil
import com.yidianling.course.CourseConstants
import com.yidianling.course.R
import com.yidianling.course.coursePlay.moudle.Course
import com.yidianling.course.courseSearch.http.CourseSearchApiUtils
import com.yidianling.course.courseSearch.view.ICourseSearchView
import com.yidianling.ydlcommon.base.BaseActivity
import com.yidianling.ydlcommon.data.ShareData
import com.yidianling.ydlcommon.h5.H5Params
import com.yidianling.ydlcommon.h5.NewH5Activity
import com.yidianling.ydlcommon.http.ThrowableConsumer
import com.yidianling.ydlcommon.router.IYDLRouterConstant
import com.yidianling.course.widget.SearchBarView
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers
......@@ -153,7 +154,7 @@ class CourseSearchActivity : BaseActivity(), CourseSearchAdapter.OnItemClick, IC
override fun onItemClickEvent(position: Int) {
var courseItem = courseList[position]
if (null != courseItem) {
val h5Params = H5Params(CourseConstants.COURSE_DETAIL_H5 + courseItem.id, this.getString(R.string.course_detail))
val h5Params = H5Params(CourseConstants.COURSE_DETAIL_H5 + courseItem.id, "课程详情")
if (null != courseItem.share && !TextUtils.isEmpty(courseItem.share.share_url)) {
val shareData = ShareData(courseItem.share.share_url, courseItem.share.title, courseItem.share.cover, courseItem.share.desc)
h5Params.shareData = shareData
......@@ -170,8 +171,8 @@ class CourseSearchActivity : BaseActivity(), CourseSearchAdapter.OnItemClick, IC
val sp = SimpleImageOpConfiger()
sp.heigt = height
sp.width = width
sp.errorPic = R.drawable.default_img
sp.loadingPic = R.drawable.default_img
sp.errorPic = R.drawable.course_default_img
sp.loadingPic = R.drawable.course_default_img
YDLImageCacheManager.showImage(CourseSearchActicity@ this, url, imageView, sp)
}
......@@ -179,6 +180,7 @@ class CourseSearchActivity : BaseActivity(), CourseSearchAdapter.OnItemClick, IC
* 根据输入搜索专家课程
* type true代表首次加载,false代表加载下一页
*/
@SuppressLint("CheckResult")
fun loadCourseList(type: Boolean) {
if (TextUtils.isEmpty(inputString)) {
activity_course_search_swipe_refresh_layout.isRefreshing = false
......@@ -234,7 +236,7 @@ class CourseSearchActivity : BaseActivity(), CourseSearchAdapter.OnItemClick, IC
if (!TextUtils.isEmpty(desc)) activity_course_search_unusual_layout_desc.text = desc
activity_course_search_unusual_layout.visibility = View.VISIBLE
activity_course_search_recycler.visibility = View.GONE
iv_empty.setImageResource(if (isEmpty) R.drawable.ico_img_zixun_empty else R.drawable.blank)
iv_empty.setImageResource(if (isEmpty) R.drawable.course_ico_img_zixun_empty else R.drawable.course_blank)
}
/**
......
package com.yidianling.course.courseSearch.http
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.course.coursePlay.common.net.NetApiStore
import com.yidianling.course.courseSearch.CourseSearchBean
import com.yidianling.ydlcommon.http.BaseAPIResponse
import com.yidianling.ydlcommon.http.BaseResponse
import com.yidianling.ydlcommon.http.YdlRetrofitUtils
import io.reactivex.Observable
/**
......@@ -20,8 +20,7 @@ class CourseSearchApiUtils {
* 专家课程搜索列表
*/
fun courseSearchList(page:Int, keyWord:String) : Observable<BaseAPIResponse<CourseSearchBean>> {
return YdlRetrofitUtils.getRxRetrofit().newBuilder().baseUrl(YdlRetrofitUtils.SERVER_API_JAVA_URL).build()
.create(CourseSearchListApi::class.java).courseSearchList(page, keyWord)
return YDLHttpUtils.obtainApi(CourseSearchListApi::class.java).courseSearchList(page, keyWord)
}
}
......
package com.yidianling.course.courseSearch.http
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.yidianling.course.courseSearch.CourseSearchBean
import com.yidianling.ydlcommon.http.BaseAPIResponse
import io.reactivex.Observable
import retrofit2.http.*
......
package com.yidianling.course.courseSearch.http
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.yidianling.course.courseSearch.CourseSearchBean
import com.yidianling.ydlcommon.http.BaseAPIResponse
import com.yidianling.ydlcommon.http.BaseResponse
import io.reactivex.Observable
/**
......
......@@ -3,13 +3,12 @@ package com.yidianling.course.course_special_list.presenter
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.mvp.base.BasePresenter
import com.yidianling.common.tools.RxNetTool
import com.yidianling.course.course_special_list.bean.CourseSpecialItemBean
import com.yidianling.course.course_special_list.contract.ICourseSpecialListContract
import com.yidianling.course.course_special_list.http.CourseSpecialListParam
import com.yidianling.course.course_special_list.model.CourseSpecialListModelImpl
import com.yidianling.ydlcommon.http.ThrowableConsumer
import com.yidianling.ydlcommon.mvp.RxPresenter
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers
......@@ -22,17 +21,9 @@ import io.reactivex.schedulers.Schedulers
* @date 2018/9/18
*/
class CourseSpecialListPresenterImpl (var view: ICourseSpecialListContract.View) :
ICourseSpecialListContract.Presenter{
override fun attachView(view: ICourseSpecialListContract.View) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun detachView() {
TODO("not implemented") //To change body of crea ted functions use File | Settings | File Templates.
}
override fun destroy() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
BasePresenter<ICourseSpecialListContract.View, ICourseSpecialListContract.Model>(),ICourseSpecialListContract.Presenter{
override fun createModel(): ICourseSpecialListContract.Model {
return CourseSpecialListModelImpl()
}
/**
......@@ -77,7 +68,7 @@ class CourseSpecialListPresenterImpl (var view: ICourseSpecialListContract.View)
* @param loadMore 是否为上拉加载更多
*/
private fun requestList(page: Int,loadMore : Boolean){
val disposable = model.specialListRequest(CourseSpecialListParam(page,0))
val disposable = mModel.specialListRequest(CourseSpecialListParam(page,0))
.subscribeOn(Schedulers.io())
.map { it }
.filter { it != null }
......
package com.yidianling.course.widget
import android.app.Activity
import android.os.Handler
import android.view.View
import android.widget.RelativeLayout
import android.widget.SeekBar
import com.bumptech.glide.Glide
import com.yidianling.course.R
import kotlinx.android.synthetic.main.course_play_music_view.view.*
/**
* Created by hgw on 2018/4/28.
*/
class HPlayView : RelativeLayout, YDLMusicPlayer.MusicControlTaker {
var control: HMusicPlayService.MusicController? = null
var listener: HPlayStatusListener? = null
var mHandler: Handler? = null
//seekBar 按下标记
var seekBarIsDown = false
var progress = 0
var mContext: Activity? = null
constructor(context1: Activity?) : super(context1) {
this.mContext = context1
mHandler = Handler()
init()
}
fun init() {
if (mContext == null) return
YDLMusicPlayer.getInstance().setMusicControlTaker(this)
View.inflate(context, R.layout.course_play_music_view, this)
play_icon.setOnClickListener {
if (control?.isPlaying() == true) {
control?.pause()
} else {
control?.start()
}
}
img_gif.setOnClickListener {
if (control?.isPlaying() == false) {
control?.start()
}
}
pro_progress.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
if (p2) {
text_start_time.text = getStringTime(p1)
progress = p1
}
}
override fun onStartTrackingTouch(p0: SeekBar?) {
seekBarIsDown = true
}
override fun onStopTrackingTouch(p0: SeekBar?) {
seekBarIsDown = false
//拖动seekbar时不进行以下操作
if (!seekBarIsDown) {
control?.seekTo(progress)
}
}
})
}
fun showNetNotice(event: () -> Unit) {
ll_net_notice.visibility = View.VISIBLE
img_gif.visibility = View.GONE
iv_net_notice.setOnClickListener {
hideNetNotice()
event()
}
}
fun hideNetNotice() {
ll_net_notice.visibility = View.GONE
img_gif.visibility = View.VISIBLE
}
fun setData(urlLi: ArrayList<MusicInfoBean>): HPlayView {
control?.setData(urlLi)
return this
}
/**
* 后台进入前台view
*/
fun updateView(index: Int) {
if (control?.isPlaying()!!) {
mHandler?.postDelayed({
pro_progress.max = control?.getDuration() ?: 0
text_end_time.text = getStringTime(pro_progress.max)
listener?.onPrepared(control?.getCurrentData(), index)
}, 0)
updateButton()
}
}
/**
* 获取当前播放下标
*/
fun getCurrentIndex(): Int {
return control?.getCurrentIndex() ?: 0
}
/**
* 获取当前播放url
*/
fun getCurrentUrl(): String {
return control?.getCurrentUrl() ?: ""
}
fun play(index: Int) {
updateButton()
YDLMusicHelper.playingType = YDLMusicHelper.PLAY_TYPE_COURSE
YDLMusicHelper.directPlay(index, true)
}
fun setImageBackground(url: String?) {
Glide.with(mContext).load(url).into(img_bg)
}
/**
* 获取播放控制器
*/
fun getPlayControl(): HMusicPlayService.MusicController? {
return control
}
/**
* 设置自动播放下一曲
*/
fun setAutoNext(auto: Boolean) {
control?.setAutoPlayNext(auto)
}
override fun onReceiveControl(control: HMusicPlayService.MusicController) {
this.control = control
setControl1(control)
}
var playStatusListener: PlayStatusListener? = null
private fun setControl1(control: HMusicPlayService.MusicController?) {
control?.setOpenNotifyCation(true)
if (playStatusListener == null) {
playStatusListener = object : PlayStatusListener {
override fun beforeStart(index: Int) {
showBufferLoading(true)
}
override fun onCompletionListener() {
// LogH.d("onCompletionListener")
updateButton()
}
override fun loading() {
// LogH.d("loading")
showBufferLoading(true)
}
override fun onPrepared() {
// LogH.d("onPrepared")
mHandler?.postDelayed({
pro_progress.max = control?.getDuration() ?: 0
text_end_time.text = getStringTime(pro_progress.max)
listener?.onPrepared(control?.getCurrentData(), control?.getCurrentIndex()
?: 0)
}, 0)
}
override fun start() {
// LogH.d("start")
setGifVisibity(true)
}
override fun pause() {
// LogH.d("pause")
setGifVisibity(false)
}
override fun onProgressUpdate(progress: Int) {
mHandler?.postDelayed({
//拖动seekbar时不进行以下操作
if (!seekBarIsDown) {
pro_progress.progress = progress
text_start_time.text = getStringTime(progress)
}
}, 0)
}
override fun OnErrorListener(p1: Int, p2: String) {
// LogH.d("OnErrorListener:$p1 $p2")
setGifVisibity(false)
}
override fun OnBufferingUpdateListener(p1: Int) {
// LogH.d("OnBufferingUpdateListener:$p1")
mHandler?.postDelayed({
pro_progress.secondaryProgress = p1 * pro_progress.max / 100
}, 0)
}
}
YDLMusicPlayer.getInstance().addListener(playStatusListener!!)
}
}
fun showBufferLoading(show: Boolean) {
mHandler?.postDelayed({
if (show) {
if (mContext != null) {
Glide.with(mContext).asGif().load(R.mipmap.loading5).into(img_gif)
}
play_icon.setImageResource(R.drawable.ico_course_play)
} else {
if (mContext != null) {
Glide.with(mContext).asGif().load(R.mipmap.audio_play).into(img_gif)
}
play_icon.setImageResource(R.drawable.ico_course_pause)
}
}, 0)
}
//显示或隐藏播放动画
fun setGifVisibity(show: Boolean) {
if (context == null) return
mHandler?.postDelayed({
if (show) {
if (mContext != null) {
Glide.with(mContext).asGif().load(R.mipmap.audio_play).into(img_gif)
}
play_icon.setImageResource(R.drawable.ico_course_pause)
} else {
if (mContext != null) {
Glide.with(mContext).asBitmap().load(R.drawable.ico_course_bg_pause).into(img_gif)
}
play_icon.setImageResource(R.drawable.ico_course_play)
}
}, 0)
}
//跟新上下音频按钮状态
fun updateButton() {
mHandler?.postDelayed({
if (control?.isPlaying() == true) {
setGifVisibity(true)
}
}, 0)
}
fun getStringTime(time: Int): String {
if (time <= 0) return "00:00"
var min = time / 60000
var ss = (time - min * 60000) / 1000
var mm = "" + min
var SS = "" + ss
if (min < 10) {
mm = "0$mm"
}
if (ss < 10) {
SS = "0$ss"
}
return "$mm:$SS"
}
fun onDestroy() {
mContext = null
mHandler = null
playStatusListener?.let { YDLMusicPlayer.getInstance().removeListener(it) }
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="17dp"
android:height="17dp" />
<stroke android:color="@color/white" android:width="6dp"/>
<solid android:color="@color/color_FFDB26" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="3dp" />
<solid android:color="#C6CACE" />
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="3dp" />
<solid android:color="#ECF0F1" />
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="3dp" />
<solid android:color="@color/color_FFDB26" />
</shape>
</clip>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="#99000000"
android:startColor="#00000000" />
</shape>
\ No newline at end of file
......@@ -24,7 +24,7 @@
android:layout_centerVertical="true"
android:paddingLeft="15dp"
android:paddingRight="10dp"
android:src="@drawable/toolbar_back"/>
android:src="@drawable/course_toolbar_back"/>
<TextView
android:id="@+id/tv_title"
......@@ -43,7 +43,7 @@
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:src="@drawable/toolbar_back"
android:src="@drawable/course_toolbar_back"
android:text="我的课程"
android:textColor="@color/right_text_color"/>
</RelativeLayout>
......
......@@ -13,7 +13,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="19dp"
android:src="@drawable/toolbar_back"
android:src="@drawable/course_toolbar_back"
app:layout_constraintBottom_toBottomOf="@+id/tv_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_title" />
......
......@@ -12,7 +12,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="15dp"
android:src="@drawable/toolbar_back"
android:src="@drawable/course_toolbar_back"
app:layout_constraintBottom_toBottomOf="@+id/tv_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_title" />
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--<include-->
<!--layout="@layout/base_module_title_bar"/>-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@color/color_FFFFFF"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="15dp">
<ImageView
android:id="@+id/activity_course_back_btn"
android:layout_width="13dp"
android:layout_height="22dp"
android:src="@drawable/course_toolbar_back"
android:visibility="gone"/>
<com.yidianling.course.widget.SearchBarView
android:id="@+id/activity_course_search_search_bar_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/activity_course_search_unusual_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_FFFFFF"
android:gravity="center_horizontal"
android:orientation="vertical"
android:visibility="invisible">
<ImageView
android:id="@+id/iv_empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="51dp"
android:src="@drawable/course_blank"/>
<TextView
android:id="@+id/activity_course_search_unusual_layout_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:textColor="@color/color_ACACAC"/>
</LinearLayout>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/activity_course_search_swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/activity_course_search_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible"/>
</android.support.v4.widget.SwipeRefreshLayout>
</FrameLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="211dp"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rela_play"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
tools:background="@color/main_theme" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.5"
android:background="@color/black"
android:scaleType="fitXY" />
<ImageView
android:id="@+id/img_gif"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_centerInParent="true"
android:src="@drawable/course_audio_play" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="15dp">
<ImageView
android:id="@+id/play_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginLeft="3dp"
android:padding="14dp"
android:scaleType="centerCrop"
android:src="@drawable/course_ico_course_play" />
<SeekBar
android:id="@+id/pro_progress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_marginLeft="-3dp"
android:layout_toLeftOf="@+id/text_start_time"
android:layout_toRightOf="@+id/play_icon"
android:maxHeight="2dp"
android:minHeight="2dp"
android:progressDrawable="@drawable/course_layer_progress"
android:thumb="@drawable/course_dot_seekbar"
tools:progress="0" />
<TextView
android:id="@+id/text_start_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/tv_line"
android:gravity="center"
android:text="00:00"
android:textColor="@color/white"
android:textSize="11sp" />
<TextView
android:id="@+id/tv_line"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/text_end_time"
android:gravity="center"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:text="/"
android:textColor="@color/white"
android:textSize="11sp" />
<TextView
android:id="@+id/text_end_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_marginRight="15dp"
android:gravity="center"
android:text="00:00"
android:textColor="@color/white"
android:textSize="11sp" />
</RelativeLayout>
<!-- 网络提示-->
<LinearLayout
android:id="@+id/ll_net_notice"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#33000000"
android:clickable="true"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="正在使用非Wi-Fi网络,播放将产生流量费用"
android:textColor="@android:color/white"
android:textSize="14sp" />
<ImageView
android:id="@+id/iv_net_notice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:src="@drawable/ico_spfc_play" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
layout="@layout/course_videoplay_view"
android:layout_width="match_parent"
android:layout_height="211dp" />
</LinearLayout>
\ No newline at end of file
......@@ -25,7 +25,7 @@
android:id="@+id/iv_course_list_empty_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/blank"
android:src="@drawable/course_blank"
android:visibility="gone"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"/>
......
......@@ -12,7 +12,7 @@
android:layout_centerVertical="true"
android:paddingLeft="15dp"
android:paddingRight="10dp"
android:src="@drawable/toolbar_back" />
android:src="@drawable/course_toolbar_back" />
<TextView
android:id="@+id/tv_title"
......
......@@ -128,4 +128,6 @@
<color name="color_99000000">#99000000</color>
<color name="color_30FFFFFF">#4DFFFFFF</color>
<color name="color_66000000">#66000000</color>
<color name="color_FFFFFF">#FFFFFF</color>
<color name="color_ACACAC">#ACACAC</color>
</resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment