Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
I
ImageVideoBanner
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
jiangjiantao
ImageVideoBanner
Commits
ed47c127
Commit
ed47c127
authored
Oct 18, 2020
by
gaodapeng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
重新写了banner,还是继续使用之前的viewpager。
parent
70319ef7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
2174 additions
and
64 deletions
+2174
-64
ImageVideoBanner.java
...rc/main/java/com/widget/imagebanner/ImageVideoBanner.java
+64
-58
ImageVideoFragment.java
.../java/com/widget/imagebanner/view/ImageVideoFragment.java
+6
-5
ViewPager.java
.../src/main/java/com/widget/imagebanner/view/ViewPager.java
+2103
-0
banner_imge_video.xml
banner/src/main/res/layout/banner_imge_video.xml
+1
-1
No files found.
banner/src/main/java/com/widget/imagebanner/ImageVideoBanner.java
View file @
ed47c127
...
@@ -8,25 +8,24 @@ import android.os.Bundle;
...
@@ -8,25 +8,24 @@ import android.os.Bundle;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.Message
;
import
android.os.Message
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
androidx.fragment.app.FragmentActivity
;
import
androidx.fragment.app.FragmentManager
;
import
androidx.lifecycle.Lifecycle
;
import
androidx.viewpager2.adapter.FragmentStateAdapter
;
import
androidx.viewpager2.widget.ViewPager2
;
import
android.util.AttributeSet
;
import
android.util.AttributeSet
;
import
android.util.LayoutDirection
;
import
android.view.LayoutInflater
;
import
android.view.LayoutInflater
;
import
android.view.MotionEvent
;
import
android.view.MotionEvent
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.FrameLayout
;
import
android.widget.FrameLayout
;
import
com.widget.imagebanner.view.ImageVideoFragment
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
androidx.fragment.app.FragmentActivity
;
import
androidx.fragment.app.FragmentManager
;
import
androidx.fragment.app.FragmentStatePagerAdapter
;
import
com.widget.imagebanner.R
;
import
com.widget.imagebanner.bean.BannerBean
;
import
com.widget.imagebanner.bean.BannerBean
;
import
com.widget.imagebanner.utils.BitmapUtils
;
import
com.widget.imagebanner.utils.BitmapUtils
;
import
com.widget.imagebanner.view.ImageVideoFragment
;
import
com.widget.imagebanner.view.ViewPager
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
...
@@ -41,9 +40,9 @@ import java.util.concurrent.ScheduledExecutorService;
...
@@ -41,9 +40,9 @@ import java.util.concurrent.ScheduledExecutorService;
import
wseemann.media.FFmpegMediaMetadataRetriever
;
import
wseemann.media.FFmpegMediaMetadataRetriever
;
public
class
ImageVideoBanner
extends
FrameLayout
implements
ImageVideoFragment
.
OnVideoCompletionListener
{
public
class
ImageVideoBanner
extends
FrameLayout
implements
ViewPager
.
OnPageChangeListener
,
ImageVideoFragment
.
OnVideoCompletionListener
{
private
static
final
int
UPTATE_VIEWPAGER
=
0
;
private
static
final
int
UPTATE_VIEWPAGER
=
0
;
private
ViewPager
2
mViewPager
;
private
ViewPager
mViewPager
;
private
List
<
BannerBean
>
mList
=
new
ArrayList
<>();
private
List
<
BannerBean
>
mList
=
new
ArrayList
<>();
private
ViewsPagerAdapter
mAdapter
;
private
ViewsPagerAdapter
mAdapter
;
private
int
autoCurrIndex
=
0
;
//设置当前 第几个图片 被选中
private
int
autoCurrIndex
=
0
;
//设置当前 第几个图片 被选中
...
@@ -72,8 +71,9 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
...
@@ -72,8 +71,9 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
private
void
initView
(
Context
context
)
{
private
void
initView
(
Context
context
)
{
View
view
=
LayoutInflater
.
from
(
context
).
inflate
(
R
.
layout
.
banner_imge_video
,
this
,
true
);
View
view
=
LayoutInflater
.
from
(
context
).
inflate
(
R
.
layout
.
banner_imge_video
,
this
,
true
);
mViewPager
=
view
.
findViewById
(
R
.
id
.
view_pager
);
mViewPager
=
view
.
findViewById
(
R
.
id
.
view_pager
);
mAdapter
=
new
ViewsPagerAdapter
(((
FragmentActivity
)
context
).
getSupportFragmentManager
()
,
((
FragmentActivity
)
context
).
getLifecycle
()
);
mAdapter
=
new
ViewsPagerAdapter
(((
FragmentActivity
)
context
).
getSupportFragmentManager
());
mViewPager
.
setAdapter
(
mAdapter
);
mViewPager
.
setAdapter
(
mAdapter
);
mViewPager
.
setOnPageChangeListener
(
this
);
//ViewPager手势滑动禁用
//ViewPager手势滑动禁用
mViewPager
.
setOnTouchListener
(
new
OnTouchListener
()
{
mViewPager
.
setOnTouchListener
(
new
OnTouchListener
()
{
@Override
@Override
...
@@ -81,18 +81,15 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
...
@@ -81,18 +81,15 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
return
true
;
return
true
;
}
}
});
});
mViewPager
.
registerOnPageChangeCallback
(
callback
);
}
}
public
void
setData
(
List
<
com
.
widget
.
imagebanner
.
bean
.
BannerBean
>
listBean
)
{
public
void
replaceData
(
List
<
BannerBean
>
listBean
)
{
if
(
listBean
!=
null
)
{
mAdapter
.
replaceData
(
listBean
);
mAdapter
.
setData
(
listBean
);
}
}
}
public
void
addData
(
List
<
com
.
widget
.
imagebanner
.
bean
.
BannerBean
>
listBean
)
{
public
void
addData
(
List
<
BannerBean
>
listBean
)
{
mAdapter
.
addData
(
listBean
);
mAdapter
.
addData
(
listBean
);
}
}
...
@@ -132,6 +129,7 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
...
@@ -132,6 +129,7 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
mmr
.
extractMetadata
(
FFmpegMediaMetadataRetriever
.
METADATA_KEY_ARTIST
);
mmr
.
extractMetadata
(
FFmpegMediaMetadataRetriever
.
METADATA_KEY_ARTIST
);
Bitmap
b
=
mmr
.
getFrameAtTime
();
// frame at 2 seconds
Bitmap
b
=
mmr
.
getFrameAtTime
();
// frame at 2 seconds
bannerBean
.
setLoadingImage
(
BitmapUtils
.
getBytes
(
b
));
bannerBean
.
setLoadingImage
(
BitmapUtils
.
getBytes
(
b
));
b
.
recycle
();
mmr
.
release
();
mmr
.
release
();
}
}
return
true
;
return
true
;
...
@@ -149,29 +147,26 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
...
@@ -149,29 +147,26 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
}
}
}
}
private
ViewPager2
.
OnPageChangeCallback
callback
=
new
ViewPager2
.
OnPageChangeCallback
()
{
@Override
@Override
public
void
onPageScrolled
(
int
position
,
float
positionOffset
,
int
positionOffsetPixels
)
{
public
void
onPageScrolled
(
int
position
,
float
positionOffset
,
int
positionOffsetPixels
)
{
}
}
@Override
@Override
public
void
onPageSelected
(
int
position
)
{
public
void
onPageSelected
(
int
position
)
{
autoCurrIndex
=
position
;
autoCurrIndex
=
position
;
// Toast.makeText(context,"position="+position,Toast.LENGTH_SHORT).show();
// Toast.makeText(context,"position="+position,Toast.LENGTH_SHORT).show();
if
(
mList
.
get
(
position
).
getType
()
==
1
)
{
if
(
mList
.
get
(
position
).
getType
()
==
1
)
{
//如果是视频
//如果是视频
stopBanner
();
stopBanner
();
}
}
}
}
@Override
@Override
public
void
onPageScrollStateChanged
(
int
state
)
{
public
void
onPageScrollStateChanged
(
int
state
)
{
}
};
}
//定时轮播图片,需要在主线程里面修改 UI
//定时轮播图片,需要在主线程里面修改 UI
private
Handler
mHandler
=
new
Handler
()
{
private
Handler
mHandler
=
new
Handler
()
{
...
@@ -209,10 +204,8 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
...
@@ -209,10 +204,8 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
public
void
startBanner
()
{
public
void
startBanner
()
{
//如果第一页是视频 不用定时器
//如果第一页是视频 不用定时器
if
(
mList
.
size
()
>
0
)
{
if
(
mList
.
get
(
0
).
getType
()
==
0
)
{
if
(
mList
.
get
(
0
).
getType
()
==
0
)
{
startBanner
(
period
);
startBanner
(
period
);
}
}
}
}
}
...
@@ -252,22 +245,20 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
...
@@ -252,22 +245,20 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
startBanner
(
0
);
startBanner
(
0
);
}
}
private
final
class
ViewsPagerAdapter
extends
FragmentStateAdapter
{
private
final
class
ViewsPagerAdapter
extends
FragmentState
Pager
Adapter
{
private
ImageVideoFragment
fragment
;
private
ImageVideoFragment
fragment
;
private
FragmentManager
fm
;
private
FragmentManager
fm
;
public
ViewsPagerAdapter
(
@NonNull
FragmentManager
fragmentManager
,
@NonNull
Lifecycle
lifecycle
)
{
public
ViewsPagerAdapter
(
FragmentManager
fm
)
{
super
(
f
ragmentManager
,
lifecycle
);
super
(
f
m
);
this
.
fm
=
f
ragmentManager
;
this
.
fm
=
f
m
;
}
}
@NonNull
@Override
@Override
public
Fragment
createFragment
(
int
position
)
{
public
Fragment
getItem
(
int
position
)
{
fragment
=
new
ImageVideoFragment
();
fragment
=
new
ImageVideoFragment
();
fragment
.
setOnVideoCompletionListener
(
ImageVideoBanner
.
this
);
fragment
.
setOnVideoCompletionListener
(
ImageVideoBanner
.
this
);
com
.
widget
.
imagebanner
.
bean
.
BannerBean
bannerBean
=
mList
.
get
(
position
);
BannerBean
bannerBean
=
mList
.
get
(
position
);
Bundle
bundle
=
new
Bundle
();
Bundle
bundle
=
new
Bundle
();
bundle
.
putSerializable
(
"bannerBean"
,
bannerBean
);
bundle
.
putSerializable
(
"bannerBean"
,
bannerBean
);
bundle
.
putBoolean
(
"loop"
,
getLoop
());
bundle
.
putBoolean
(
"loop"
,
getLoop
());
...
@@ -275,11 +266,6 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
...
@@ -275,11 +266,6 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
return
fragment
;
return
fragment
;
}
}
@Override
public
int
getItemCount
()
{
return
mList
.
size
();
}
/**
/**
* 只有1个视频的时候循环播放
* 只有1个视频的时候循环播放
*
*
...
@@ -292,17 +278,37 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
...
@@ -292,17 +278,37 @@ public class ImageVideoBanner extends FrameLayout implements ImageVideoFragment.
return
false
;
return
false
;
}
}
public
void
setData
(
@NonNull
List
<
BannerBean
>
listBean
)
{
@Override
public
int
getCount
()
{
return
mList
.
size
();
}
@Override
public
int
getItemPosition
(
Object
object
)
{
if
(
mList
.
size
()
>
0
)
{
return
POSITION_NONE
;
}
return
super
.
getItemPosition
(
object
);
}
public
void
replaceData
(
List
<
BannerBean
>
listBean
)
{
// 新数据和原来数据对比,不一致才去刷新
// 新数据和原来数据对比,不一致才去刷新
boolean
change
=
compareData
(
listBean
);
boolean
change
=
compareData
(
listBean
);
if
(!
change
)
{
if
(!
change
)
{
notifyDataSetChanged
();
notifyDataSetChanged
();
// startBanner();
return
;
return
;
}
}
mList
.
clear
();
if
(
null
!=
listBean
)
{
addData
(
listBean
);
mList
.
clear
();
notifyDataSetChanged
();
addData
(
listBean
);
autoCurrIndex
=
0
;
//如果第一张是图片 需要开启定时器
if
(
listBean
.
get
(
0
).
getType
()
==
0
)
{
startBanner
();
}
autoCurrIndex
=
0
;
// startBanner();
}
}
}
...
...
banner/src/main/java/com/widget/imagebanner/view/ImageVideoFragment.java
View file @
ed47c127
...
@@ -7,10 +7,6 @@ import android.os.Bundle;
...
@@ -7,10 +7,6 @@ import android.os.Bundle;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.Message
;
import
android.os.Message
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
android.util.Log
;
import
android.util.Log
;
import
android.view.LayoutInflater
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.View
;
...
@@ -19,12 +15,17 @@ import android.widget.ImageView;
...
@@ -19,12 +15,17 @@ import android.widget.ImageView;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
android.widget.VideoView
;
import
android.widget.VideoView
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
com.bumptech.glide.Glide
;
import
com.bumptech.glide.Glide
;
import
com.widget.imagebanner.R
;
import
com.widget.imagebanner.R
;
import
com.widget.imagebanner.bean.BannerBean
;
import
com.widget.imagebanner.bean.BannerBean
;
import
com.widget.imagebanner.utils.BannerLogFileUtils
;
import
com.widget.imagebanner.utils.BannerLogFileUtils
;
import
com.widget.imagebanner.utils.BitmapUtils
;
import
com.widget.imagebanner.utils.BitmapUtils
;
import
java.io.File
;
import
java.io.File
;
...
@@ -268,7 +269,7 @@ public class ImageVideoFragment extends Fragment {
...
@@ -268,7 +269,7 @@ public class ImageVideoFragment extends Fragment {
private
void
pausePlayer
()
{
private
void
pausePlayer
()
{
if
(
null
!=
mVideoView
)
{
if
(
null
!=
mVideoView
)
{
Log
.
e
(
TAG
,
"pausePlayer 当前进度是"
+
mVideoView
.
getCurrentPosition
());
Log
.
e
(
TAG
,
"pausePlayer 当前进度是"
+
mVideoView
.
getCurrentPosition
());
mVideoView
.
setBackgroundColor
(
getResources
().
getColor
(
android
.
R
.
color
.
white
)
);
mVideoView
.
setBackgroundColor
(
Color
.
WHITE
);
playerPaused
=
true
;
playerPaused
=
true
;
this
.
currentPosition
=
mVideoView
.
getCurrentPosition
();
this
.
currentPosition
=
mVideoView
.
getCurrentPosition
();
mVideoView
.
pause
();
mVideoView
.
pause
();
...
...
banner/src/main/java/com/widget/imagebanner/view/ViewPager.java
0 → 100644
View file @
ed47c127
This diff is collapsed.
Click to expand it.
banner/src/main/res/layout/banner_imge_video.xml
View file @
ed47c127
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<
androidx.viewpager2.widget.ViewPager2
<
com.widget.imagebanner.view.ViewPager
android:id=
"@+id/view_pager"
android:id=
"@+id/view_pager"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment