diff --git a/app_aidl_client/src/main/java/com/phone/aidl/aidl/Book.java b/app_aidl_client/src/main/java/com/phone/aidl/aidl/Book.java index 964b27b58685ab0d314cdeda1c43991e81443780..d49d38a22e2bf5e69ec4a2842edada96d846e5dd 100644 --- a/app_aidl_client/src/main/java/com/phone/aidl/aidl/Book.java +++ b/app_aidl_client/src/main/java/com/phone/aidl/aidl/Book.java @@ -8,7 +8,6 @@ import android.os.Parcelable; * * @author Urasaki * @version 1.0 - * @copyright 亿帆 * @date 2023-01-03$ 21:10:30$ **/ public class Book implements Parcelable { diff --git a/app_aidl_server/src/main/java/com/phone/aidl/aidl/Book.java b/app_aidl_server/src/main/java/com/phone/aidl/aidl/Book.java index cc8f96a5ca343fafbc6142bd24a251cf7f964577..0aec04c544ae6f0ba7b9f3f19ef97d8b0768359c 100644 --- a/app_aidl_server/src/main/java/com/phone/aidl/aidl/Book.java +++ b/app_aidl_server/src/main/java/com/phone/aidl/aidl/Book.java @@ -8,7 +8,6 @@ import android.os.Parcelable; * * @author Urasaki * @version 1.0 - * @copyright 亿帆 * @date 2023-01-03$ 21:10:30$ **/ public class Book implements Parcelable { diff --git a/library_base/src/main/cpp/libs/arm64-v8a/libnative-lib.so b/library_base/src/main/cpp/libs/arm64-v8a/libnative-lib.so index 1db8a17a5782b9971ed16b908f5df211c56bc30c..abf7dfbdc9f192d8f270d1f42c6d2fce721b7b6d 100755 Binary files a/library_base/src/main/cpp/libs/arm64-v8a/libnative-lib.so and b/library_base/src/main/cpp/libs/arm64-v8a/libnative-lib.so differ diff --git a/library_base/src/main/cpp/libs/arm64-v8a/libreturn-data.so b/library_base/src/main/cpp/libs/arm64-v8a/libreturn-data.so index 7a02d7f5e1a3ded77bb0e79902ba8a382ebe3923..7868b939698c02c17b6d26dd1885173100a26947 100755 Binary files a/library_base/src/main/cpp/libs/arm64-v8a/libreturn-data.so and b/library_base/src/main/cpp/libs/arm64-v8a/libreturn-data.so differ diff --git a/library_base/src/main/cpp/libs/armeabi-v7a/libnative-lib.so b/library_base/src/main/cpp/libs/armeabi-v7a/libnative-lib.so index cb57918086e9b0d437fee7a6bc5ec4caf6300b81..e92de93d9587b1a652d9f0d7b130e5c1ba8dfec2 100755 Binary files a/library_base/src/main/cpp/libs/armeabi-v7a/libnative-lib.so and b/library_base/src/main/cpp/libs/armeabi-v7a/libnative-lib.so differ diff --git a/library_base/src/main/cpp/libs/armeabi-v7a/libreturn-data.so b/library_base/src/main/cpp/libs/armeabi-v7a/libreturn-data.so index bd2dd5ce314ade408bfbf9bb24ad402274612792..94fcbb1591fddb10ea909cd206f99c22e4e9c991 100755 Binary files a/library_base/src/main/cpp/libs/armeabi-v7a/libreturn-data.so and b/library_base/src/main/cpp/libs/armeabi-v7a/libreturn-data.so differ diff --git a/library_base/src/main/java/com/phone/library_base/common/ConstantData.kt b/library_base/src/main/java/com/phone/library_base/common/ConstantData.kt index 84214f4f32d1e92c726dec02339072ed576e8839..6dce10f481baf99bce054d1e99894ac21e2dfe77 100644 --- a/library_base/src/main/java/com/phone/library_base/common/ConstantData.kt +++ b/library_base/src/main/java/com/phone/library_base/common/ConstantData.kt @@ -46,6 +46,7 @@ object ConstantData { const val ROUTE_SQUARE = "/module_square/ui/square" + const val ROUTE_SQUARE_CUSTOM_BANNER = "/module_square/ui/custom_banner" const val ROUTE_SQUARE_FRAGMENT = "/module_square/fragment/square_fragment" const val ROUTE_JSBRIDGE = "/module_square/ui/jsbridge" const val ROUTE_CREATE_USER = "/module_square/ui/create_user" diff --git a/library_common/src/main/res/values/strings.xml b/library_common/src/main/res/values/strings.xml index 125777be49e476248c5e076a5b27ab9b773a8db0..6db9945deaca3a0ddb32374970c025af668b9ac3 100644 --- a/library_common/src/main/res/values/strings.xml +++ b/library_common/src/main/res/values/strings.xml @@ -115,6 +115,7 @@ jsbridge 三級連動列表 下載文件 + 自定义Banner functionToJs functionToJs2 diff --git a/library_custom_view/src/main/java/com/phone/library_custom_view/custom_view/BannerIndicator.kt b/library_custom_view/src/main/java/com/phone/library_custom_view/custom_view/BannerIndicator.kt new file mode 100644 index 0000000000000000000000000000000000000000..2bd894d06d4559e743c993eef20e5fa42e189768 --- /dev/null +++ b/library_custom_view/src/main/java/com/phone/library_custom_view/custom_view/BannerIndicator.kt @@ -0,0 +1,68 @@ +package com.phone.library_custom_view.custom_view + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.util.AttributeSet +import android.view.View +import com.phone.library_custom_view.R + +class BannerIndicator(context: Context, attrs: AttributeSet?) : View(context, attrs) { + + companion object { + private const val TAG = "BannerIndicator" + } + + private var number = 0 + private var position = 0 + private val mPaint = Paint() + private var selectColor = 0 + private var unselectColor = 0 + private var radius = 0f + private var space = 0f + + init { + val typedArray = context.obtainStyledAttributes(attrs, R.styleable.BannerIndicator) + selectColor = typedArray.getColor(R.styleable.BannerIndicator_selectColor, Color.RED) + unselectColor = + typedArray.getColor(R.styleable.BannerIndicator_unselectedColor, Color.WHITE) + radius = typedArray.getDimension(R.styleable.BannerIndicator_radius, 8f) + space = typedArray.getDimension(R.styleable.BannerIndicator_space, 16f) + typedArray.recycle() + + mPaint.style = Paint.Style.FILL; + mPaint.isAntiAlias = true; + mPaint.isFilterBitmap = true; + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + val startPosition = width.toFloat() / 2 - (radius * 2 * number + space * (number - 1)) / 2 + canvas.save() + for (i in 0 until number) { + if (i == position) { + mPaint.color = selectColor + } else { + mPaint.color = unselectColor + } + canvas.drawCircle( + startPosition + radius * (2 * i + 1) + i * space, + height.toFloat() / 2, + radius, + mPaint + ) + } + canvas.restore() + } + + fun setNumber(number: Int) { + this.number = number + } + + fun setPosition(position: Int) { + this.position = position + invalidate() + } + +} \ No newline at end of file diff --git a/library_custom_view/src/main/res/values/attrs.xml b/library_custom_view/src/main/res/values/attrs.xml new file mode 100644 index 0000000000000000000000000000000000000000..1aefc69d93beb30bc3393ee10034db34649079b7 --- /dev/null +++ b/library_custom_view/src/main/res/values/attrs.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/module_square/build.gradle b/module_square/build.gradle index 10cccb90f160b99567849c4b829317bafb32c7f2..f3225db9a7e59b1581629d18d6489246f72087b6 100644 --- a/module_square/build.gradle +++ b/module_square/build.gradle @@ -125,6 +125,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + implementation project(path: ':library_glide') //Android路由(用于不同app之间的跳转) // implementation "com.alibaba:arouter-api:$BuildVersions.arouter_api_version" diff --git a/module_square/src/main/java/com/phone/module_square/adapter/NewBannerAdapter.kt b/module_square/src/main/java/com/phone/module_square/adapter/NewBannerAdapter.kt new file mode 100644 index 0000000000000000000000000000000000000000..5c67dad8102bfb0021dc79264e850914cb5ca174 --- /dev/null +++ b/module_square/src/main/java/com/phone/module_square/adapter/NewBannerAdapter.kt @@ -0,0 +1,52 @@ +package com.phone.module_square.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.phone.module_square.R +import com.phone.module_square.bean.PictureBean + +class NewBannerAdapter(val context: Context?, val list: MutableList) : + RecyclerView.Adapter() { + + companion object { + private const val TAG = "NewBannerAdapter" + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): RecyclerView.ViewHolder { + val view: View = + LayoutInflater.from(parent.context).inflate(R.layout.square_item_image, parent, false) + return BodyViewHolder(view) + } + + override fun onBindViewHolder( + holder: RecyclerView.ViewHolder, + position: Int + ) { + if (holder is BodyViewHolder) { + if (list.isNotEmpty() && context != null) { + Glide.with(context).load(list[position % list.size].picture).into(holder.imageView) + } + } + } + + override fun getItemCount(): Int { + return Int.MAX_VALUE + } + + private class BodyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView + + init { + imageView = itemView.findViewById(R.id.item_image) as ImageView + } + } + +} \ No newline at end of file diff --git a/module_square/src/main/java/com/phone/module_square/bean/PictureBean.java b/module_square/src/main/java/com/phone/module_square/bean/PictureBean.java new file mode 100644 index 0000000000000000000000000000000000000000..c6f936c6ea3bd08fda6d8f36fea1429cec1ed0a5 --- /dev/null +++ b/module_square/src/main/java/com/phone/module_square/bean/PictureBean.java @@ -0,0 +1,47 @@ +package com.phone.module_square.bean; + +import android.text.TextUtils; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import java.util.Objects; + +/** + * 一句话描述该类功能. + * + * @author Urasaki + * @version 1.0 + * @date 2024-02-24$ 16:42:00$ + **/ +public class PictureBean implements Cloneable { + + public String id; + public int picture; + + public PictureBean(String id, int picture) { + this.id = id; + this.picture = picture; + } + + @NonNull + @Override + public PictureBean clone() throws CloneNotSupportedException { + return (PictureBean) super.clone(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj == this) { + return true; + } + // 使用getClass()判断对象是否属于该类 + if (obj == null || obj.getClass() != getClass()) { + return false; + } + + PictureBean other = (PictureBean) obj; + return Objects.equals(this.id, other.id) && this.picture == other.picture; + } + +} diff --git a/module_square/src/main/java/com/phone/module_square/custom/SmoothLinearLayoutManager.kt b/module_square/src/main/java/com/phone/module_square/custom/SmoothLinearLayoutManager.kt new file mode 100644 index 0000000000000000000000000000000000000000..6794e649153b4d741ae38fa100422e6bf3fb0f3a --- /dev/null +++ b/module_square/src/main/java/com/phone/module_square/custom/SmoothLinearLayoutManager.kt @@ -0,0 +1,27 @@ +package com.phone.module_square.custom + +import android.content.Context +import android.util.DisplayMetrics +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.LinearSmoothScroller +import androidx.recyclerview.widget.RecyclerView + +class SmoothLinearLayoutManager(context: Context, orientation: Int, reverseLayout: Boolean) : + LinearLayoutManager(context, orientation, reverseLayout) { + + override fun smoothScrollToPosition( + recyclerView: RecyclerView, + state: RecyclerView.State?, + position: Int + ) { + val linearSmoothScroller: LinearSmoothScroller = + object : LinearSmoothScroller(recyclerView.context) { + override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float { + return 0.1f //返回0.2 让它滚动不要那么快 + } + } + linearSmoothScroller.targetPosition = position + startSmoothScroll(linearSmoothScroller) + } + +} \ No newline at end of file diff --git a/module_square/src/main/java/com/phone/module_square/fragment/SquareFragment.kt b/module_square/src/main/java/com/phone/module_square/fragment/SquareFragment.kt index 4eccd9fd848f9d0a1ed289d7fa598c4fcaa74c11..6f5c88859c02a0b86b67b20ba4ba1a0d1e4ba5d0 100644 --- a/module_square/src/main/java/com/phone/module_square/fragment/SquareFragment.kt +++ b/module_square/src/main/java/com/phone/module_square/fragment/SquareFragment.kt @@ -44,7 +44,8 @@ import java.util.concurrent.atomic.AtomicBoolean * introduce : */ @Route(path = ConstantData.Route.ROUTE_SQUARE_FRAGMENT) -class SquareFragment : BaseMvvmRxFragment(R.layout.square_fragment_square) { +class SquareFragment : + BaseMvvmRxFragment(R.layout.square_fragment_square) { companion object { private val TAG: String = SquareFragment::class.java.simpleName @@ -264,6 +265,11 @@ class SquareFragment : BaseMvvmRxFragment() + + override fun initLayoutId(): Int = R.layout.square_activity_custom_banner + + override fun initData() { + // 存入图片 + pictureList.add(PictureBean("1", R.mipmap.pucture_sunrise1)) + pictureList.add(PictureBean("2", R.mipmap.pucture_sunrise2)) + pictureList.add(PictureBean("3", R.mipmap.pucture_sunrise3)) + pictureList.add(PictureBean("5", R.mipmap.pucture_sunrise5)) + pictureList.add(PictureBean("6", R.mipmap.pucture_sunrise6)) + } + + override fun initViews() { + toolbar = findViewById(R.id.toolbar) as Toolbar + layoutBack = findViewById(R.id.layout_back) as FrameLayout + imvBack = findViewById(R.id.imv_back) as ImageView + layoutBanner = findViewById(R.id.layout_banner) as FrameLayout + layoutIndicator = findViewById(R.id.layout_indicator) as FrameLayout + + setToolbar(false, R.color.library_black) + imvBack?.setColorFilter(ResourcesManager.getColor(R.color.library_white)) + layoutBack?.setOnClickListener { + finish() + } + + compareData(mutableListOf(), pictureList) + } + + override fun initLoadData() { + delayedUpdate() + } + + private fun addBannerView(list: MutableList) { + layoutBanner?.removeAllViews() + val recyclerView = RecyclerView(this@CustomBannerActivity) + val layoutParams = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT + ) + layoutBanner?.addView(recyclerView, layoutParams) + val adapter = NewBannerAdapter(this@CustomBannerActivity, list) + // LinearLayoutManager 第二个参数表示布局方向,默认是垂直的 + // 这里轮播广告要用为LinearLayoutManager.HORIZONTAL,水平方向 + // 使用LinearLayoutManager会让图片滚动太快,我们继承LinearLayoutManager写一个子类重写它的滑动,让它不要太快 + // LinearLayoutManager layoutManager = new LinearLayoutManager(this@CustomBannerActivity, LinearLayoutManager.HORIZONTAL, false); + var smoothLinearLayoutManager: SmoothLinearLayoutManager? = null + if (list.size > 1) { + smoothLinearLayoutManager = SmoothLinearLayoutManager( + this@CustomBannerActivity, LinearLayoutManager.HORIZONTAL, false + ) + recyclerView.layoutManager = smoothLinearLayoutManager + } else { + val linearLayoutManager: LinearLayoutManager = + object : LinearLayoutManager(this@CustomBannerActivity) { + override fun canScrollVertically(): Boolean { + return false + } + } + recyclerView.layoutManager = linearLayoutManager + recyclerView.isNestedScrollingEnabled = false //禁止滑动 + } + recyclerView.setHasFixedSize(true) + recyclerView.adapter = adapter + // 由于广告是一页一页的划过去,所以我们还需要用SnapHelper的子类PagerSnapHelper。直接追加到上面的recyclerView.setAdapter(adapter) 后面。 + val snapHelper = PagerSnapHelper() + snapHelper.attachToRecyclerView(recyclerView) + // recyclerView.scrollToPosition(list.size()*10)这句使RecyclerView一开始位于 list.size()*10 处,避免了一开始position为0不能前滑的尴尬 + recyclerView.scrollToPosition(list.size * 10) + if (list.size > 1) { + // 指示器 显示指示器上的红点需要得到当前展示的广告轮播图片的position。RecyclerView有个addOnScrollListener()方法,可以监听当前滑动状态 + indicator(recyclerView, smoothLinearLayoutManager, list) + // 自动轮播 + autoScroll(recyclerView, smoothLinearLayoutManager) + } + } + + /** + * 比较数据,如果相同则不更新,如果不相同则更新 + * pictureList 原始数据 + * list 新的数据 + */ + private fun compareData( + rawDataList: MutableList, newDatalist: MutableList + ) { + val rawDataListClone = mutableListOf() + for (index in 0 until rawDataList.size) { + rawDataListClone.add(rawDataList[index].clone()) + } + val newDatalistClone = mutableListOf() + for (index in 0 until newDatalist.size) { + newDatalistClone.add(newDatalist[index].clone()) + } + + if (rawDataListClone.size == newDatalistClone.size) { + for (index in rawDataListClone.size - 1 downTo 0) { + for (index2 in newDatalistClone.size - 1 downTo 0) { + if (rawDataListClone[index] == newDatalistClone[index2]) { + rawDataListClone.removeAt(index) + newDatalistClone.removeAt(index2) + break + } + } + } + if (rawDataListClone.size > 0 || newDatalistClone.size > 0) { + LogManager.i(TAG, "compareData rawDataListClone.size*****${rawDataListClone.size}") + LogManager.i(TAG, "compareData newDatalistClone.size*****${newDatalistClone.size}") + + scheduledExecutorService?.shutdownNow() + this.pictureList.clear() + this.pictureList.addAll(newDatalist) + addBannerView(this.pictureList) + } else { + LogManager.i(TAG, "compareData 两个List完全相同") + } + } else { + LogManager.i(TAG, "compareData 重新设置数据") + + scheduledExecutorService?.shutdownNow() + this.pictureList.clear() + this.pictureList.addAll(newDatalistClone) + addBannerView(this.pictureList) + } + } + + private fun delayedUpdate() { + scheduledExecutorService2 = Executors.newScheduledThreadPool(1) + scheduledExecutorService2?.scheduleAtFixedRate({ + handler.post { + this@CustomBannerActivity.time++ + LogManager.i(TAG, "delayedUpdate time*****${this@CustomBannerActivity.time}") + val list = mutableListOf() + if (this@CustomBannerActivity.time == 1) { + list.add(PictureBean("1", R.mipmap.pucture_sunrise1)) + list.add(PictureBean("2", R.mipmap.pucture_sunrise2)) + list.add(PictureBean("0", R.mipmap.pucture_sunrise3)) + list.add(PictureBean("5", R.mipmap.pucture_sunrise5)) + list.add(PictureBean("6", R.mipmap.pucture_sunrise6)) + +// list.add(PictureBean("7", R.mipmap.picture_fujiyama1)) +// list.add(PictureBean("8", R.mipmap.picture_fujiyama2)) +// list.add(PictureBean("9", R.mipmap.picture_fujiyama3)) +// list.add(PictureBean("10", R.mipmap.picture_fujiyama5)) +// list.add(PictureBean("11", R.mipmap.picture_fujiyama6)) + } else if (this@CustomBannerActivity.time == 2) { + list.add(PictureBean("15", R.mipmap.library_picture_new)) + list.add(PictureBean("16", R.mipmap.library_picture_new2)) + list.add(PictureBean("17", R.mipmap.library_picture_new3)) + } else if (this@CustomBannerActivity.time == 3) { + list.add(PictureBean("21", R.mipmap.library_picture24)) + list.add(PictureBean("22", R.mipmap.library_picture25)) + list.add(PictureBean("23", R.mipmap.library_picture26)) + list.add(PictureBean("24", R.mipmap.library_picture27)) + list.add(PictureBean("25", R.mipmap.library_picture28)) + list.add(PictureBean("26", R.mipmap.library_picture30)) + } else { + list.add(PictureBean("21", R.mipmap.library_picture24)) + list.add(PictureBean("22", R.mipmap.library_picture25)) + list.add(PictureBean("23", R.mipmap.library_picture26)) + list.add(PictureBean("24", R.mipmap.library_picture27)) + list.add(PictureBean("25", R.mipmap.library_picture28)) + list.add(PictureBean("26", R.mipmap.library_picture30)) + } + + compareData(pictureList, list) + } + }, 30000, 50000, TimeUnit.MILLISECONDS) // 表示2秒后每过2秒运行一次run()里的程序 + } + + private fun autoScroll(recyclerView: RecyclerView, layoutManager: LinearLayoutManager?) { + scheduledExecutorService = Executors.newScheduledThreadPool(1) + scheduledExecutorService?.scheduleAtFixedRate({ // layoutManager.findFirstVisibleItemPosition() 表示得到当前RecyclerView第一个能看到的item的位置。 + // 由于广告是每次展示一张,所以得到的就是当前图片的position。 + // recyclerView.smoothScrollToPosition(int position)表示滑动到某个position。 + // 所以上面的代码就表示每过2秒滑动到下个position,以此来完成自动轮播。 + handler.post { + layoutManager?.let { + recyclerView.smoothScrollToPosition(it.findFirstVisibleItemPosition() + 1) + } + } + }, 4000, 4000, TimeUnit.MILLISECONDS) // 表示2秒后每过2秒运行一次run()里的程序 + } + + private fun indicator( + recyclerView: RecyclerView, layoutManager: LinearLayoutManager?, list: List + ) { + val bannerIndicator = BannerIndicator(this@CustomBannerActivity, null) + bannerIndicator.setNumber(list.size) + layoutIndicator?.removeAllViews() + layoutIndicator?.addView(bannerIndicator) + recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + //dx为横向滚动 dy为竖向滚动 + //如果为竖向滚动,则isSliding属性为true,横向滚动则为false + val isSliding = dx > 0 + if (isSliding) { + scheduledExecutorService?.shutdownNow() + autoScroll(recyclerView, layoutManager) + } + } + + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + // onScrollStateChangedd的 newState 参数有三种状态: + // SCROLL_STATE_IDLE 静止状态 + // SCROLL_STATE_DRAGGING 拖拽状态 + // SCROLL_STATE_SETTLING手指离开后的惯性滚动状态 + // 当RecyclerView的状态为SCROLL_STATE_IDLE时得到当前图片的position,然后与图片列表取余就得到指示器红点的位置。 + if (newState == RecyclerView.SCROLL_STATE_IDLE && layoutManager != null) { + val i = layoutManager.findFirstVisibleItemPosition() % list.size + //得到指示器红点的位置 + bannerIndicator.setPosition(i) + } + } + }) + } + + override fun onDestroy() { + scheduledExecutorService?.shutdownNow() + scheduledExecutorService2?.shutdownNow() + super.onDestroy() + } +} \ No newline at end of file diff --git a/module_square/src/main/java/library/AndroidManifest.xml b/module_square/src/main/java/library/AndroidManifest.xml index 82bbc189f3a82859b1e74c33ca4672fd8e7ec666..f63641520ccdf8127daef23845788b0f33ae0b95 100644 --- a/module_square/src/main/java/library/AndroidManifest.xml +++ b/module_square/src/main/java/library/AndroidManifest.xml @@ -43,6 +43,11 @@ android:exported="false" android:launchMode="singleTask" android:screenOrientation="portrait" /> + \ No newline at end of file diff --git a/module_square/src/main/java/module/AndroidManifest.xml b/module_square/src/main/java/module/AndroidManifest.xml index eee59c0f39751bca6b9dba67d55d0f53d8c0d6b2..887647538e009eef17685e51179937b2517ba5d2 100644 --- a/module_square/src/main/java/module/AndroidManifest.xml +++ b/module_square/src/main/java/module/AndroidManifest.xml @@ -57,6 +57,11 @@ android:exported="false" android:launchMode="singleTask" android:screenOrientation="portrait" /> + \ No newline at end of file diff --git a/module_square/src/main/res/layout/square_activity_custom_banner.xml b/module_square/src/main/res/layout/square_activity_custom_banner.xml new file mode 100644 index 0000000000000000000000000000000000000000..aafb997fc0e35ef772f5cba868c6b8c1d16f89b1 --- /dev/null +++ b/module_square/src/main/res/layout/square_activity_custom_banner.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/module_square/src/main/res/layout/square_fragment_square.xml b/module_square/src/main/res/layout/square_fragment_square.xml index 1ab292652972e96971f913e9d8dae1ae443d2ba9..31cb78b3ab7d895745b96381bf5cdc3673a18165 100644 --- a/module_square/src/main/res/layout/square_fragment_square.xml +++ b/module_square/src/main/res/layout/square_fragment_square.xml @@ -415,6 +415,27 @@ android:layout_height="@dimen/base_dp_1" android:background="@color/library_color_555555" /> + + + + + + + + + diff --git a/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama1.jpeg b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..296eecb76509ce20b725db97ae2e8ce5edf7d139 Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama1.jpeg differ diff --git a/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama2.jpg b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81a9b108b28c04eadde02d5c17b7cfe9701e3ac2 Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama2.jpg differ diff --git a/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama3.jpeg b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a5f8da6b35338ea6cc7e5e5be47ca3056643e605 Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama3.jpeg differ diff --git a/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama5.jpeg b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama5.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..892f211257175bc15781a27795662607016ded9f Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama5.jpeg differ diff --git a/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama6.jpeg b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama6.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2b2eca4e3d27418ecda2d671199e7c6f153f84aa Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/picture_fujiyama6.jpeg differ diff --git a/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise1.jpeg b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3ce0b44e7205cc72499c1d0f8d3d5bb8e98ccccc Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise1.jpeg differ diff --git a/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise2.jpg b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41b44c59c6867a354e2ad185b14e382c58cddbaf Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise2.jpg differ diff --git a/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise3.jpg b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7da06bacd95219bf104261f8f00804a8e14c2681 Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise3.jpg differ diff --git a/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise5.jpeg b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise5.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3d3baa4fc7524dd0b4d95199054755eff9c5c247 Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise5.jpeg differ diff --git a/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise6.jpg b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8637803edad6093eab32accecbad3cf63cbddb73 Binary files /dev/null and b/module_square/src/main/res/mipmap-xxhdpi/pucture_sunrise6.jpg differ