Commit 6d5b62b6 authored by 许译文's avatar 许译文

file manager select的图片选择清理功能以及其他逻辑实现

parent 384816a3
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
namespace 'com.zxhyis.tools'
compileSdk 33
defaultConfig {
applicationId "com.zxhyis.tools"
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures{
viewBinding true
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
implementation 'com.airbnb.android:lottie:6.2.0'
implementation("androidx.datastore:datastore-preferences:1.0.0")
implementation("com.github.pokercc:ExpandableRecyclerView:0.9.3")
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1"
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name=".FileApp"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.FileManagerSelect"
tools:targetApi="31">
<activity
android:name=".ui.fun.ResultActivity"
android:exported="false" />
<activity
android:name=".ui.fun.PictureDetailActivity"
android:exported="false" />
<activity
android:name=".ui.fun.ApkListActivity"
android:exported="false" />
<activity
android:name=".ui.fun.AudioActivity"
android:exported="false" />
<activity
android:name=".ui.fun.VideoActivity"
android:exported="false" />
<activity
android:name=".ui.fun.PictureActivity"
android:exported="false" />
<activity
android:name=".ui.home.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
\ No newline at end of file
package com.zxhyis.tools
import android.annotation.SuppressLint
import android.app.Application
import android.content.Context
class FileApp : Application() {
companion object{
@SuppressLint("StaticFieldLeak")
@JvmStatic
lateinit var fContext:Context
}
override fun onCreate() {
super.onCreate()
fContext=this
}
}
\ No newline at end of file
package com.zxhyis.tools.logic
import android.graphics.Bitmap
import java.io.File
data class ImageInfoBean(
val imagePath:String,
val imageBitmap:Bitmap,
val file:File,
var isShow:Boolean=false,
var isSelected:Boolean=false
)
package com.zxhyis.tools.logic
object Counts {
const val REQUEST_ALL_FILE=30
}
\ No newline at end of file
...@@ -4,7 +4,9 @@ import android.app.Activity ...@@ -4,7 +4,9 @@ import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.view.View import android.view.View
import android.widget.Toast
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import com.zxhyis.tools.FileApp
inline fun <reified T : Activity> Context.startActivity(vararg params: Pair<String, Any?>) { inline fun <reified T : Activity> Context.startActivity(vararg params: Pair<String, Any?>) {
val intent = Intent(this, T::class.java) val intent = Intent(this, T::class.java)
...@@ -16,4 +18,8 @@ fun View.setOnClick(action: () -> Unit) { ...@@ -16,4 +18,8 @@ fun View.setOnClick(action: () -> Unit) {
this.setOnClickListener { action() } this.setOnClickListener { action() }
} }
fun String.showToast(duration: Int = Toast.LENGTH_SHORT) {
Toast.makeText(FileApp.fContext, this, duration).show()
}
package com.zxhyis.tools.ui.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
open class CommonAdapter<T> constructor(
private val layoutId: Int,
private val dataList: ArrayList<T>,
private val bindHolder: View.(T) -> Unit
) : RecyclerView.Adapter<CommonAdapter.ViewHolder>() {
private var itemClick: T.() -> Unit = {}
constructor(layoutId: Int,
itemList: ArrayList<T>,
bindHolder: View.(T) -> Unit,
itemClick: T.() -> Unit = {}) : this(layoutId,itemList, bindHolder) {
this.itemClick = itemClick
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemView=LayoutInflater.from(parent.context).inflate(layoutId,parent,false)
return ViewHolder(itemView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val type=dataList[position]
holder.itemView.bindHolder(type)
holder.itemView.setOnClickListener {
itemOnClick(it,position)
}
}
override fun getItemCount()=dataList.size
open fun itemOnClick(itemView: View,position: Int){
dataList[position].itemClick()
}
}
package com.zxhyis.tools.ui.dialog
import androidx.fragment.app.DialogFragment
class FIleDialog:DialogFragment() {
}
\ No newline at end of file
package com.zxhyis.tools.ui.`fun`
import com.zxhyis.tools.base.TopActivity
import com.zxhyis.tools.databinding.ActivityApkListBinding
class ApkListActivity : TopActivity<ActivityApkListBinding>() {
override fun getViewBinding1(): ActivityApkListBinding {
return ActivityApkListBinding.inflate(layoutInflater)
}
override fun init() {
}
}
\ No newline at end of file
package com.zxhyis.tools.ui.`fun`
import com.zxhyis.tools.base.TopActivity
import com.zxhyis.tools.databinding.ActivityAudioBinding
class AudioActivity : TopActivity<ActivityAudioBinding>() {
override fun getViewBinding1(): ActivityAudioBinding {
return ActivityAudioBinding.inflate(layoutInflater)
}
override fun init() {
}
}
\ No newline at end of file
package com.zxhyis.tools.ui.`fun`
import android.Manifest
import android.animation.Animator
import android.animation.Animator.AnimatorListener
import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.BitmapFactory
import android.os.Build
import android.os.Environment
import android.provider.MediaStore
import android.provider.Settings
import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.widget.AppCompatImageView
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.GridLayoutManager
import com.zxhyis.tools.R
import com.zxhyis.tools.base.TopActivity
import com.zxhyis.tools.databinding.ActivityPictureBinding
import com.zxhyis.tools.logic.Counts
import com.zxhyis.tools.logic.ImageInfoBean
import com.zxhyis.tools.logic.setOnClick
import com.zxhyis.tools.logic.showToast
import com.zxhyis.tools.logic.startActivity
import com.zxhyis.tools.ui.adapter.CommonAdapter
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.io.File
@SuppressLint("NotifyDataSetChanged")
class PictureActivity : TopActivity<ActivityPictureBinding>() {
private val imageList = ArrayList<ImageInfoBean>()
private val imageSelectedList = ArrayList<ImageInfoBean>()
private val result =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {}
override fun getViewBinding1(): ActivityPictureBinding {
return ActivityPictureBinding.inflate(layoutInflater)
}
@SuppressLint("Recycle")
override fun init() {
vb.inPicture.tvTitle.text = getString(R.string.tv_picture)
vb.inPicture.ivBack.setOnClick {
finish()
}
vb.tvSet.setOnClick {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
result.launch(Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION))
} else {
ActivityCompat.requestPermissions(
this,
arrayOf(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
), Counts.REQUEST_ALL_FILE
)
}
}
vb.inPicture.tvMenu.setOnClick {
if (imageList.size>0){
vb.inPicture.ivBack.visibility = View.GONE
vb.inPicture.tvMenu.visibility = View.GONE
vb.inPicture.imageSelectAll.visibility = View.VISIBLE
vb.inPicture.tvAll.visibility = View.VISIBLE
vb.llBottom.visibility = View.VISIBLE
vb.inPicture.tvTitle.text = getString(R.string.select_project)
for (image in imageList) {
image.isShow = true
}
vb.rvImage.adapter?.notifyDataSetChanged()
}else{
getString(R.string.file_not_found).showToast()
}
}
vb.ivShare.setOnClick {
when {
imageSelectedList.size in 1..3 -> {
}
imageSelectedList.size > 3 -> {
"Select up to three".showToast()
}
else ->{
"Select at least one".showToast()
}
}
}
vb.ivDelete.setOnClick {
if (imageSelectedList.size>0){
deleteImages()
vb.apply {
inPicture.clInclude.visibility=View.GONE
rvImage.visibility=View.GONE
icNoFile.visibility=View.GONE
tvNoFile.visibility=View.GONE
imageLoad.visibility=View.VISIBLE
tvLoad.visibility=View.VISIBLE
}
}else{
"Select at least one".showToast()
}
}
vb.inPicture.imageSelectAll.setOnClick {
vb.inPicture.imageSelectAll.isSelected = !vb.inPicture.imageSelectAll.isSelected
if (vb.inPicture.imageSelectAll.isSelected) {
for (image in imageList) {
image.isSelected = true
imageSelectedList.add(image)
}
} else {
for (image in imageList) {
image.isSelected = false
imageSelectedList.remove(image)
}
}
vb.rvImage.adapter?.notifyDataSetChanged()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
finish()
}
})
}
override fun onResume() {
super.onResume()
imageList.clear()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
vb.apply {
imagePer.visibility = View.GONE
tvDes.visibility = View.GONE
tvSet.visibility = View.GONE
rvImage.visibility = View.VISIBLE
loadImages()
}
} else {
vb.apply {
imagePer.visibility = View.VISIBLE
tvDes.visibility = View.VISIBLE
tvSet.visibility = View.VISIBLE
rvImage.visibility = View.GONE
}
}
} else {
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
) {
vb.apply {
imagePer.visibility = View.VISIBLE
tvDes.visibility = View.VISIBLE
tvSet.visibility = View.VISIBLE
rvImage.visibility = View.GONE
}
} else {
vb.apply {
imagePer.visibility = View.GONE
tvDes.visibility = View.GONE
tvSet.visibility = View.GONE
rvImage.visibility = View.VISIBLE
loadImages()
}
}
}
}
@SuppressLint("Recycle", "CutPasteId")
private fun loadImages() {//加载图片
CoroutineScope(Dispatchers.IO).launch {
delay(1000)
val projection = arrayOf(MediaStore.Images.Media.DATA)
val cursor = contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
null,
null,
null
)
cursor?.let {
val columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
while (cursor.moveToNext()) {
val imagePath = cursor.getString(columnIndex)
val bitmap = BitmapFactory.decodeFile(imagePath)
val file=File(imagePath)
imageList.add(ImageInfoBean(imagePath, bitmap,file))//数据源
}
cursor.close()
}
//init rv
runOnUiThread {
if (imageList.size>0){
vb.rvImage.apply {
layoutManager = GridLayoutManager(this@PictureActivity, 3)
adapter = CommonAdapter(
R.layout.item_image_info,
imageList,
{
this.findViewById<AppCompatImageView>(R.id.iv_image)
.setImageBitmap(it.imageBitmap)
if (it.isShow) {
this.findViewById<AppCompatImageView>(R.id.iv_select).visibility =
View.VISIBLE
} else {
this.findViewById<AppCompatImageView>(R.id.iv_select).visibility =
View.GONE
}
this.findViewById<AppCompatImageView>(R.id.iv_select).isSelected =
it.isSelected
}) {
if (!this.isShow) {
startActivity<PictureDetailActivity>("image_path" to this.imagePath)
} else {
val isSelected = this.isSelected
this.isSelected = !isSelected
if (this.isSelected){
imageSelectedList.add(this)
}else{
imageSelectedList.remove(this)
}
if (imageSelectedList.size>0){
vb.ivShare.setImageResource(R.drawable.ic_share_selected)
vb.ivDelete.setImageResource(R.drawable.ic_delete_selected)
}else{
vb.ivShare.setImageResource(R.drawable.ic_share)
vb.ivDelete.setImageResource(R.drawable.ic_delete)
}
vb.rvImage.adapter?.notifyDataSetChanged()
}
}
}
vb.apply {
rvImage.visibility=View.VISIBLE
icNoFile.visibility=View.GONE
tvNoFile.visibility=View.GONE
}
}else{
vb.apply {
rvImage.visibility=View.GONE
icNoFile.visibility=View.VISIBLE
tvNoFile.visibility=View.VISIBLE
}
}
}
}
}
private fun deleteImages(){
// for (image in imageSelectedList){
// image.file.delete()
// }
deleteImagesWhenDone(imageSelectedList){
}
}
private fun deleteImagesWhenDone(list:ArrayList<ImageInfoBean>,onAllDeleted: () -> Unit){
var deletedCount = 0
val total=list.size
for (image in list){
if (image.file.delete()){
deletedCount++
if (deletedCount==total){
onAllDeleted()
}
}
}
}
override fun onDestroy() {
super.onDestroy()
imageList.clear()
imageSelectedList.clear()
}
}
\ No newline at end of file
package com.zxhyis.tools.ui.`fun`
import android.annotation.SuppressLint
import android.graphics.BitmapFactory
import com.zxhyis.tools.base.TopActivity
import com.zxhyis.tools.databinding.ActivityPictureDetailBinding
import com.zxhyis.tools.logic.setOnClick
class PictureDetailActivity : TopActivity<ActivityPictureDetailBinding>() {
override fun getViewBinding1(): ActivityPictureDetailBinding {
return ActivityPictureDetailBinding.inflate(layoutInflater)
}
@SuppressLint("Recycle")
override fun init() {
val imagePath=intent.getStringExtra("image_path")
val bitmap = BitmapFactory.decodeFile(imagePath)
vb.imageDetail.setImageBitmap(bitmap)
vb.inImageDetail.ivBack.setOnClick {
finish()
}
}
}
\ No newline at end of file
package com.zxhyis.tools.ui.`fun`
import com.zxhyis.tools.base.TopActivity
import com.zxhyis.tools.databinding.ActivityResultBinding
class ResultActivity : TopActivity<ActivityResultBinding>() {
override fun getViewBinding1(): ActivityResultBinding {
return ActivityResultBinding.inflate(layoutInflater)
}
override fun init() {
}
}
\ No newline at end of file
package com.zxhyis.tools.ui.`fun`
import com.zxhyis.tools.base.TopActivity
import com.zxhyis.tools.databinding.ActivityVideoBinding
class VideoActivity : TopActivity<ActivityVideoBinding>() {
override fun getViewBinding1(): ActivityVideoBinding {
return ActivityVideoBinding.inflate(layoutInflater)
}
override fun init() {
}
}
\ No newline at end of file
package com.zxhyis.tools.ui.home package com.zxhyis.tools.ui.home
import android.os.Bundle import android.os.Bundle
import android.os.Environment
import android.os.StatFs
import android.text.format.Formatter
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.zxhyis.tools.base.TopFragment import com.zxhyis.tools.base.TopFragment
import com.zxhyis.tools.databinding.FragmentHomeBinding import com.zxhyis.tools.databinding.FragmentHomeBinding
import com.zxhyis.tools.logic.setOnClick
import com.zxhyis.tools.logic.startActivity
import com.zxhyis.tools.ui.`fun`.PictureActivity
class HomeFragment : TopFragment<FragmentHomeBinding>() { class HomeFragment : TopFragment<FragmentHomeBinding>() {
...@@ -19,10 +25,24 @@ class HomeFragment : TopFragment<FragmentHomeBinding>() { ...@@ -19,10 +25,24 @@ class HomeFragment : TopFragment<FragmentHomeBinding>() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
mK.pb.setProgress(30f) init()
mK.pb.setProgressColor(0xFFFFFF) }
mK.pb.setBackColor(0x52FFFFFF)
mK.pb.setStrokeWidth(8f) private fun init(){
val stat = StatFs(Environment.getExternalStorageDirectory().path)
val totalSize = stat.totalBytes
val availableSize = stat.availableBytes
val usedSize = totalSize - availableSize
val usedPercentage = usedSize.toFloat() / totalSize * 100
mK.pb.progress=usedPercentage.toInt()
mK.tvProgress.text="${usedPercentage.toInt()}"
mK.tvFreeSize.text=Formatter.formatFileSize(requireActivity(),availableSize)
mK.tvUsedSize.text=Formatter.formatFileSize(requireActivity(),usedSize)
mK.clsPicture.setOnClick {
requireActivity().startActivity<PictureActivity>()
}
} }
......
package com.zxhyis.tools.ui.view
import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.RectF
import android.util.AttributeSet
import android.view.View
import androidx.core.content.ContextCompat
import com.zxhyis.tools.R
import kotlin.math.min
class CircularPr (context: Context, attrs: AttributeSet) : View(context, attrs){
private var progressPaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
private var backgroundPaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
private var progress = 0f
private var maxProgress = 100f
private var progressColor = ContextCompat.getColor(context, R.color.main_color)
private var backgroundColor = ContextCompat.getColor(context, R.color.second_color)
private var strokeWidth = 20f
private var angle = 0f
private var rectF = RectF()
init {
progressPaint.color = progressColor
progressPaint.style = Paint.Style.STROKE
progressPaint.strokeWidth = strokeWidth
backgroundPaint.color = backgroundColor
backgroundPaint.style = Paint.Style.STROKE
backgroundPaint.strokeWidth = strokeWidth
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val centerX = width / 2f
val centerY = height / 2f
val radius = min(centerX, centerY) - strokeWidth / 2
rectF.set(centerX - radius, centerY - radius, centerX + radius, centerY + radius)
canvas.drawCircle(centerX, centerY, radius, backgroundPaint)
canvas.drawArc(rectF, -90f, angle, false, progressPaint)
}
fun setProgress(progress: Float) {
this.progress = progress
this.angle = 360 * progress / maxProgress
invalidate()
}
fun setMaxProgress(maxProgress: Float) {
this.maxProgress = maxProgress
}
fun setProgressColor(color: Int) {
this.progressColor = color
progressPaint.color = progressColor
invalidate()
}
fun setBackColor(color: Int) {
this.backgroundColor = color
backgroundPaint.color = backgroundColor
invalidate()
}
fun setStrokeWidth(width: Float) {
this.strokeWidth = width
progressPaint.strokeWidth = strokeWidth
backgroundPaint.strokeWidth = strokeWidth
invalidate()
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/image_selected_all" android:state_selected="true"/>
<item android:drawable="@drawable/iamge_unselected_all"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/image_selected" android:state_selected="true"/>
<item android:drawable="@drawable/image_unselected"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:width="289dp" android:height="50dp">
<shape android:shape="rectangle">
<solid android:color="#EEEEEE" />
<corners android:topLeftRadius="25dp" android:topRightRadius="25dp" android:bottomLeftRadius="25dp" android:bottomRightRadius="25dp" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector
android:width="108dp"
android:height="108dp" android:height="108dp"
android:width="108dp"
android:viewportHeight="108"
android:viewportWidth="108" android:viewportWidth="108"
android:viewportHeight="108"> xmlns:android="http://schemas.android.com/apk/res/android">
<path <path android:fillColor="#3DDC84"
android:fillColor="#3DDC84" android:pathData="M0,0h108v108h-108z"/>
android:pathData="M0,0h108v108h-108z" /> <path android:fillColor="#00000000" android:pathData="M9,0L9,108"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#00000000" <path android:fillColor="#00000000" android:pathData="M19,0L19,108"
android:pathData="M9,0L9,108" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="0.8" <path android:fillColor="#00000000" android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M39,0L39,108"
android:fillColor="#00000000" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="M19,0L19,108" <path android:fillColor="#00000000" android:pathData="M49,0L49,108"
android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeColor="#33FFFFFF" /> <path android:fillColor="#00000000" android:pathData="M59,0L59,108"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#00000000" <path android:fillColor="#00000000" android:pathData="M69,0L69,108"
android:pathData="M29,0L29,108" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="0.8" <path android:fillColor="#00000000" android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M89,0L89,108"
android:fillColor="#00000000" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="M39,0L39,108" <path android:fillColor="#00000000" android:pathData="M99,0L99,108"
android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeColor="#33FFFFFF" /> <path android:fillColor="#00000000" android:pathData="M0,9L108,9"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#00000000" <path android:fillColor="#00000000" android:pathData="M0,19L108,19"
android:pathData="M49,0L49,108" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="0.8" <path android:fillColor="#00000000" android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M0,39L108,39"
android:fillColor="#00000000" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="M59,0L59,108" <path android:fillColor="#00000000" android:pathData="M0,49L108,49"
android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeColor="#33FFFFFF" /> <path android:fillColor="#00000000" android:pathData="M0,59L108,59"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#00000000" <path android:fillColor="#00000000" android:pathData="M0,69L108,69"
android:pathData="M69,0L69,108" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="0.8" <path android:fillColor="#00000000" android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M0,89L108,89"
android:fillColor="#00000000" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="M79,0L79,108" <path android:fillColor="#00000000" android:pathData="M0,99L108,99"
android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeColor="#33FFFFFF" /> <path android:fillColor="#00000000" android:pathData="M19,29L89,29"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#00000000" <path android:fillColor="#00000000" android:pathData="M19,39L89,39"
android:pathData="M89,0L89,108" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="0.8" <path android:fillColor="#00000000" android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M19,59L89,59"
android:fillColor="#00000000" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="M99,0L99,108" <path android:fillColor="#00000000" android:pathData="M19,69L89,69"
android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeColor="#33FFFFFF" /> <path android:fillColor="#00000000" android:pathData="M19,79L89,79"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#00000000" <path android:fillColor="#00000000" android:pathData="M29,19L29,89"
android:pathData="M0,9L108,9" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="0.8" <path android:fillColor="#00000000" android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M49,19L49,89"
android:fillColor="#00000000" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="M0,19L108,19" <path android:fillColor="#00000000" android:pathData="M59,19L59,89"
android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeColor="#33FFFFFF" /> <path android:fillColor="#00000000" android:pathData="M69,19L69,89"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#00000000" <path android:fillColor="#00000000" android:pathData="M79,19L79,89"
android:pathData="M0,29L108,29" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector> </vector>
...@@ -4,13 +4,14 @@ ...@@ -4,13 +4,14 @@
android:height="108dp" android:height="108dp"
android:viewportWidth="108" android:viewportWidth="108"
android:viewportHeight="108"> android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z"> <path
android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor"> <aapt:attr name="android:fillColor">
<gradient <gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793" android:startY="49.59793"
android:startX="42.9492"
android:endY="92.4963"
android:endX="85.84757"
android:type="linear"> android:type="linear">
<item <item
android:color="#44000000" android:color="#44000000"
...@@ -22,9 +23,9 @@ ...@@ -22,9 +23,9 @@
</aapt:attr> </aapt:attr>
</path> </path>
<path <path
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:fillColor="#FFFFFF" android:fillColor="#FFFFFF"
android:fillType="nonZero" android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1" android:strokeWidth="1"
android:strokeColor="#00000000" /> android:strokeColor="#00000000"/>
</vector> </vector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.fun.ApkListActivity">
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.fun.AudioActivity">
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
tools:context=".ui.fun.PictureActivity">
<include
android:id="@+id/in_picture"
layout="@layout/layout_title"/>
<androidx.appcompat.widget.AppCompatImageView
android:visibility="gone"
app:layout_constraintVertical_bias="0.3"
android:id="@+id/image_per"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_permission"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/in_picture" />
<androidx.appcompat.widget.AppCompatTextView
android:visibility="gone"
android:id="@+id/tv_des"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="There are no permissions We need to get\npermission to read all files."
android:textColor="#ff999999"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/image_per" />
<androidx.appcompat.widget.AppCompatTextView
android:visibility="gone"
android:textSize="19sp"
android:textStyle="bold"
android:textColor="#fff"
android:gravity="center"
android:id="@+id/tv_set"
android:text="@string/tv_set"
android:background="@drawable/bg_shape_set"
android:layout_marginTop="50dp"
android:layout_marginStart="43dp"
android:layout_marginEnd="43dp"
android:layout_width="match_parent"
android:layout_height="50dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_des" />
<androidx.recyclerview.widget.RecyclerView
android:visibility="visible"
android:layout_marginBottom="15dp"
android:id="@+id/rv_image"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="15dp"
android:layout_marginTop="30dp"
android:layout_marginEnd="15dp"
app:layout_constraintBottom_toTopOf="@+id/ll_bottom"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/in_picture" />
<androidx.appcompat.widget.AppCompatImageView
android:visibility="gone"
android:id="@+id/image_load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/image_load"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.4" />
<androidx.appcompat.widget.AppCompatTextView
android:visibility="gone"
android:id="@+id/tv_load"
android:gravity="center"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This process may take a few seconds,\nplease wait a moment"
android:textColor="#ff999999"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/image_load" />
<androidx.appcompat.widget.AppCompatImageView
android:visibility="gone"
android:id="@+id/ic_no_file"
app:layout_constraintVertical_bias="0.3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_no_file"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/in_picture" />
<androidx.appcompat.widget.AppCompatTextView
android:visibility="gone"
android:id="@+id/tv_no_file"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/file_not_found"
android:textColor="#ff999999"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="@+id/ic_no_file"
app:layout_constraintStart_toStartOf="@+id/ic_no_file"
app:layout_constraintTop_toBottomOf="@+id/ic_no_file" />
<androidx.appcompat.widget.LinearLayoutCompat
android:visibility="gone"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
android:layout_height="80dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:gravity="top|center_horizontal"
android:orientation="vertical"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_share"
android:padding="10dp"
android:src="@drawable/ic_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_share"
android:layout_marginTop="-10dp"
android:textStyle="bold"
android:text="@string/tv_share"
android:textColor="#ff666666"
android:textSize="12sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:gravity="top|center_horizontal"
android:orientation="vertical"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_delete"
android:padding="10dp"
android:src="@drawable/ic_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_delete"
android:layout_marginTop="-10dp"
android:textStyle="bold"
android:text="@string/tv_delete"
android:textColor="#ff666666"
android:textSize="12sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.fun.PictureDetailActivity">
<include
android:id="@+id/in_image_detail"
layout="@layout/layout_only_back"/>
<androidx.appcompat.widget.AppCompatImageView
android:scaleType="fitXY"
android:layout_marginBottom="20dp"
android:id="@+id/image_detail"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/linearLayoutCompat2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/in_image_detail" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/linearLayoutCompat2"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginStart="17dp"
android:layout_marginEnd="17dp"
android:layout_marginBottom="64.5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/bg_shape_set"
android:gravity="center"
android:text="@string/tv_delete"
android:textColor="#ffffffff"
android:textSize="19sp"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="35dp"
android:layout_weight="1"
android:background="@drawable/bg_shape_recovery"
android:gravity="center"
android:text="@string/tv_recovery"
android:textColor="#000000"
android:textSize="19sp"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.fun.ResultActivity">
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.fun.VideoActivity">
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -34,17 +34,49 @@ ...@@ -34,17 +34,49 @@
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<com.zxhyis.tools.ui.view.CircularPr <com.google.android.material.progressindicator.CircularProgressIndicator
android:progress="70"
app:indicatorColor="#fff"
app:indicatorSize="78dp"
app:trackThickness="8dp"
app:trackColor="#52FFFFFF"
app:layout_constraintHorizontal_bias="0.05" app:layout_constraintHorizontal_bias="0.05"
android:id="@+id/pb" android:id="@+id/pb"
android:layout_width="78dp" android:layout_width="wrap_content"
android:layout_height="78dp" android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/pb"
app:layout_constraintEnd_toEndOf="@+id/pb"
app:layout_constraintStart_toStartOf="@+id/pb"
app:layout_constraintTop_toTopOf="@+id/pb">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="70"
android:textColor="#fff"
android:textSize="25sp"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="%"
android:textColor="#fff"
android:textSize="14sp"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:paddingHorizontal="10dp" android:paddingHorizontal="10dp"
android:orientation="vertical" android:orientation="vertical"
...@@ -117,7 +149,7 @@ ...@@ -117,7 +149,7 @@
android:layout_height="80dp"> android:layout_height="80dp">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/csl_picture" android:id="@+id/cls_picture"
android:background="@drawable/bg_shape_home_item" android:background="@drawable/bg_shape_home_item"
android:layout_weight="1" android:layout_weight="1"
android:layout_width="0dp" android:layout_width="0dp"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_image"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginTop="12dp"
android:scaleType="centerCrop"
android:src="@drawable/home_picture"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:visibility="gone"
android:id="@+id/iv_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bg_selected"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/iv_image" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="60dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_back"
android:padding="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/iv_return"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -3,10 +3,12 @@ ...@@ -3,10 +3,12 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp"> android:id="@+id/cl_include"
android:layout_height="60dp">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:visibility="visible"
android:id="@+id/iv_back" android:id="@+id/iv_back"
android:padding="10dp" android:padding="10dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -17,6 +19,29 @@ ...@@ -17,6 +19,29 @@
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:visibility="gone"
android:id="@+id/image_select_all"
android:padding="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bg_select_all"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:visibility="gone"
android:id="@+id/tv_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tv_all"
android:textColor="#ff666666"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/image_select_all"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title" android:id="@+id/tv_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp"> android:layout_height="60dp">
......
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
\ No newline at end of file
...@@ -6,4 +6,11 @@ ...@@ -6,4 +6,11 @@
<string name="tv_view">View</string> <string name="tv_view">View</string>
<string name="tv_tool">Tool</string> <string name="tv_tool">Tool</string>
<string name="tv_picture">Picture</string> <string name="tv_picture">Picture</string>
<string name="tv_set">Set</string>
<string name="tv_delete">Delete</string>
<string name="tv_recovery">Recovery</string>
<string name="tv_all">All</string>
<string name="select_project">Select Project</string>
<string name="tv_share">Share</string>
<string name="file_not_found">File not found</string>
</resources> </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