diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dd7ccaf..0058f43 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,6 +19,7 @@ imagePaths = new ArrayList<>(); // 图片路径列表 @@ -97,8 +97,8 @@ public class ImportActivity extends AppCompatActivity { @Override public void run() { imagePaths.add(imagePath); - Log.d("2332323", "run: "+imagePaths.size()); - if (!imagePaths.isEmpty()){ + Log.d("2332323", "run: " + imagePaths.size()); + if (!imagePaths.isEmpty()) { binding.importBackground.setVisibility(View.GONE); binding.importText.setVisibility(View.GONE); } @@ -115,11 +115,11 @@ public class ImportActivity extends AppCompatActivity { } private void setRecyclerView() { - MyItemSpace myItemSpace = new MyItemSpace(16, 20, 15); - recyclerView.addItemDecoration(myItemSpace); + ItemDecoration itemDecoration = new ItemDecoration(16, 19, 10); + recyclerView.addItemDecoration(itemDecoration); recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); Log.d("22222225555", "onCreate: " + imagePaths.size()); - adapter = new ImageAdapter(imagePaths, this,this); + adapter = new ImageAdapter(imagePaths, this, this); recyclerView.setAdapter(adapter); } @@ -178,13 +178,23 @@ public class ImportActivity extends AppCompatActivity { if (!imagePaths.isEmpty()) { binding.importBackground.setVisibility(View.GONE); binding.importText.setVisibility(View.GONE); - }else { + } else { binding.importBackground.setVisibility(View.VISIBLE); binding.importText.setVisibility(View.VISIBLE); } } }); } + + public void deleteImage(String imagePath, ImageAdapter adapter) { + File imageFile = new File(imagePath); + if (imageFile.exists()) { + imageFile.delete();// 删除文件 + } + } + + + } diff --git a/app/src/main/java/com/lh/painting/InitialPageActivity.java b/app/src/main/java/com/lh/painting/InitialPageActivity.java index 7c1b758..f043703 100644 --- a/app/src/main/java/com/lh/painting/InitialPageActivity.java +++ b/app/src/main/java/com/lh/painting/InitialPageActivity.java @@ -43,6 +43,7 @@ public class InitialPageActivity extends AppCompatActivity { } Intent intent = new Intent(InitialPageActivity.this, MainActivity.class); startActivity(intent); + finish(); } }).start(); } diff --git a/app/src/main/java/com/lh/painting/MainApplication.java b/app/src/main/java/com/lh/painting/MainApplication.java new file mode 100644 index 0000000..9f81505 --- /dev/null +++ b/app/src/main/java/com/lh/painting/MainApplication.java @@ -0,0 +1,33 @@ +package com.lh.painting; + +import android.app.Application; +import android.content.Context; + +public class MainApplication extends Application { + /** + * 全局的上下文 + */ + private static Context mContext; + + @Override + public void onCreate() { + super.onCreate(); + //获取应用的上下文并赋值给 mContext + mContext = getApplicationContext(); + } + + /** + * 获取context + * @return + */ + public static Context getContext(){ + return mContext; + } + + //重写 onLowMemory 方法,在系统内存不足时调用。这里只是调用了父类的 onLowMemory 方法,没有做其他处理 + @Override + public void onLowMemory() { + super.onLowMemory(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/lh/painting/MyFavotrite.java b/app/src/main/java/com/lh/painting/MyFavotrite.java index 021d506..df07628 100644 --- a/app/src/main/java/com/lh/painting/MyFavotrite.java +++ b/app/src/main/java/com/lh/painting/MyFavotrite.java @@ -1,27 +1,20 @@ package com.lh.painting; import android.annotation.SuppressLint; -import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.GridLayoutManager; -import com.lh.painting.adapter.HomeAdapter; import com.lh.painting.adapter.LikeAdapter; import com.lh.painting.dao.TaskDao; -import com.lh.painting.databinding.ActivityImportBinding; import com.lh.painting.databinding.ActivityMyFavotriteBinding; import com.lh.painting.db.AppDatabase; import com.lh.painting.entity.Favorite; -import com.lh.painting.manager.Keys; -import com.lh.painting.tool.MyItemSpace; +import com.lh.painting.tool.ItemDecoration; import java.util.ArrayList; import java.util.List; @@ -81,8 +74,8 @@ public class MyFavotrite extends AppCompatActivity { Log.d("3333333333", "setRecyclerview: "+favoriteList.size()); GridLayoutManager gridLayoutManager = new GridLayoutManager(MyFavotrite.this, 2); binding.likeRecyclerview.setLayoutManager(gridLayoutManager); - MyItemSpace myItemSpace = new MyItemSpace( 16,20, 15); - binding.likeRecyclerview.addItemDecoration(myItemSpace); + ItemDecoration itemDecoration = new ItemDecoration(16, 19, 10); + binding.likeRecyclerview.addItemDecoration(itemDecoration); binding.likeRecyclerview.setAdapter(adapter); } diff --git a/app/src/main/java/com/lh/painting/PaintingFragment.java b/app/src/main/java/com/lh/painting/PaintingFragment.java index ca0ed12..d03fdd6 100644 --- a/app/src/main/java/com/lh/painting/PaintingFragment.java +++ b/app/src/main/java/com/lh/painting/PaintingFragment.java @@ -1,30 +1,27 @@ package com.lh.painting; - import android.os.Bundle; - -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.GridLayoutManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; + import com.lh.painting.adapter.HomeAdapter; import com.lh.painting.databinding.FragmentPaintingBinding; - import com.lh.painting.manager.Keys; -import com.lh.painting.tool.MyItemSpace; +import com.lh.painting.tool.ItemDecoration; -import java.util.List; public class PaintingFragment extends Fragment { - private FragmentPaintingBinding binding; private static final String ARG_PARAM1 = "param1"; + private FragmentPaintingBinding binding; private String dirStr; private int mParam1; - // private EndlessRecyclerViewScrollListener scrollListener; + // private EndlessRecyclerViewScrollListener scrollListener; public static PaintingFragment newInstance(int i) { @@ -49,20 +46,20 @@ public class PaintingFragment extends Fragment { View view = inflater.inflate(R.layout.fragment_painting, container, false); binding = FragmentPaintingBinding.bind(view); - setRecyclerView(); - - return view; - } - private void setRecyclerView() { //List list = Utils.fileExistsInAssets(requireContext(), dirStr); - MyItemSpace myItemSpace = new MyItemSpace( 16,20, 15); - binding.recyclerview.addItemDecoration(myItemSpace); dirStr = Keys.getAllDir().get(mParam1); HomeAdapter preViewAdapter = new HomeAdapter(requireContext(), dirStr); - // binding.recyclerview.addOnScrollListener(); + // binding.recyclerview.addOnScrollListener(); + + binding.recyclerview.setLayoutManager(new GridLayoutManager(requireContext(), 2)); + + ItemDecoration itemDecoration = new ItemDecoration(16, 19, 10); + binding.recyclerview.addItemDecoration(itemDecoration); + binding.recyclerview.setAdapter(preViewAdapter); - GridLayoutManager gridLayoutManager = new GridLayoutManager(requireContext(), 2); - binding.recyclerview.setLayoutManager(gridLayoutManager); + + return view; } + } \ No newline at end of file diff --git a/app/src/main/java/com/lh/painting/adapter/HomeAdapter.java b/app/src/main/java/com/lh/painting/adapter/HomeAdapter.java index 0d9c1eb..571c174 100644 --- a/app/src/main/java/com/lh/painting/adapter/HomeAdapter.java +++ b/app/src/main/java/com/lh/painting/adapter/HomeAdapter.java @@ -57,74 +57,63 @@ public class HomeAdapter extends RecyclerView.Adapter { public void onBindViewHolder(@NonNull HomeVH holder, @SuppressLint("RecyclerView") int position) { String filePath = dir + "/" + (position + 1) + ".jpg"; -//Bitmap bitmap = Utils.loadImageFromAssets(mCon, filePath); + + // 初始化数据库 initDb(); + + // 重置收藏按钮的初始状态,避免复用问题 + holder.collect.setImageResource(R.drawable.collect); // 初始状态为未收藏 + + // 加载图片 Glide.with(mCon) .asDrawable() .diskCacheStrategy(DiskCacheStrategy.ALL) .load("file:///android_asset/" + filePath) .into(holder.imPreview); - new Thread(new Runnable() { - @Override - public void run() { - if (dao.getTaskByUrl(filePath) != null) { - Log.d("2323232", "run: " + dao.getTaskByUrl(filePath)); - ((Activity) mCon).runOnUiThread(new Runnable() { - @Override - public void run() { - holder.collect.setBackgroundResource(R.drawable.like); - } + + // 查询数据库,更新收藏状态 + new Thread(() -> { + Favorite favorite = dao.getTaskByUrl(filePath); // 查询数据库是否已收藏 + ((Activity) mCon).runOnUiThread(() -> { + if (favorite != null) { + holder.collect.setImageResource(R.drawable.like); // 如果已收藏,设置为收藏状态 + } else { + holder.collect.setImageResource(R.drawable.collect); // 未收藏,显示默认状态 + } + }); + }).start(); + + // 处理点击事件 + holder.collect.setOnClickListener(view -> { + new Thread(() -> { + Favorite favorite1 = dao.getTaskByUrl(filePath); + if (favorite1 == null) { + // 如果未收藏,添加到数据库 + favorite = new Favorite(); + favorite.setPicture(filePath); + AppDatabase.getDatabase(mCon).taskDao().insertTask(favorite); + ((Activity) mCon).runOnUiThread(() -> { + holder.collect.setImageResource(R.drawable.like); // 更新为已收藏状态 + }); + } else { + // 如果已收藏,从数据库中移除 + AppDatabase.getDatabase(mCon).taskDao().deleteTaskByUrl(filePath); + ((Activity) mCon).runOnUiThread(() -> { + holder.collect.setImageResource(R.drawable.collect); // 更新为未收藏状态 }); } - } - }).start(); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent(mCon, CameraActivity.class); - intent.putExtra("filePath", filePath); - mCon.startActivity(intent); - } + }).start(); }); - - holder.collect.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new Thread(new Runnable() { - @Override - public void run() { - Favorite favorite1 = dao.getTaskByUrl(filePath); - if (favorite1 == null) { - favorite = new Favorite(); - favorite.setPicture(filePath); - AppDatabase.getDatabase(mCon).taskDao().insertTask(favorite); - Log.d("4444444", "run: " + position); - Log.d("4444444", "run: " + filePath); - ((Activity) mCon).runOnUiThread(new Runnable() { - @Override - public void run() { - holder.collect.setBackgroundResource(R.drawable.like); - Toast.makeText(mCon, "Successful collection", Toast.LENGTH_SHORT).show(); - } - }); - } else { - AppDatabase.getDatabase(mCon).taskDao().deleteTaskByUrl(filePath); - Log.d("4444444", "ru: " + filePath); - ((Activity) mCon).runOnUiThread(new Runnable() { - @Override - public void run() { - holder.collect.setBackgroundResource(R.drawable.collect); - Toast.makeText(mCon, "cancel collection", Toast.LENGTH_SHORT).show(); - } - }); - } - } - }).start(); - } + // 处理点击查看大图的事件 + holder.itemView.setOnClickListener(view -> { + Intent intent = new Intent(mCon, CameraActivity.class); + intent.putExtra("filePath", filePath); + mCon.startActivity(intent); }); } + private void initDb() { //初始化db AppDatabase db = AppDatabase.getDatabase(mCon); diff --git a/app/src/main/java/com/lh/painting/adapter/ImageAdapter.java b/app/src/main/java/com/lh/painting/adapter/ImageAdapter.java index c12af42..cbc5db7 100644 --- a/app/src/main/java/com/lh/painting/adapter/ImageAdapter.java +++ b/app/src/main/java/com/lh/painting/adapter/ImageAdapter.java @@ -1,6 +1,7 @@ package com.lh.painting.adapter; import android.annotation.SuppressLint; import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.util.Log; @@ -14,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.lh.painting.CameraActivity; +import com.lh.painting.ImportActivity; import com.lh.painting.R; import com.lh.painting.dao.TaskDao; import com.lh.painting.db.AppDatabase; @@ -26,8 +28,8 @@ public class ImageAdapter extends RecyclerView.Adapter imagePaths = new ArrayList<>(); - private Activity activity; - public ImageAdapter( List imagePaths , Context context,Activity activity) { + private ImportActivity activity; + public ImageAdapter(List imagePaths , Context context, ImportActivity activity) { this.imagePaths=imagePaths; this.context=context; this.activity=activity; @@ -58,7 +60,7 @@ public class ImageAdapter extends RecyclerView.Adapter { + // 创建 AlertDialog.Builder + AlertDialog.Builder builder = new AlertDialog.Builder(activity); + builder.setTitle("Confirm deletion"); + builder.setMessage("Are you sure you want to delete this picture?"); + + // 设置删除按钮 + builder.setPositiveButton("delete", (dialog, which) -> { + // 执行删除操作 + activity.deleteImage(imagePath, this); // 传递适配器实例,调用 ImportActivity 中的删除方法 + imagePaths.remove(position); // 从列表中移除 + notifyItemRemoved(position); // 通知适配器更新 + notifyItemRangeChanged(position, imagePaths.size()); // 更新剩余项的位置 + + activity.runOnUiThread(() -> { + // 检查列表是否为空,更新 UI + if (imagePaths.isEmpty()) { + activity.findViewById(R.id.import_background).setVisibility(View.VISIBLE); + activity.findViewById(R.id.import_text).setVisibility(View.VISIBLE); + } + }); + }); + + // 设置取消按钮 + builder.setNegativeButton("cancel", (dialog, which) -> dialog.dismiss()); + + // 显示对话框 + AlertDialog dialog = builder.create(); + dialog.show(); + + return true; // 表示事件已处理 + }); + holder.collect.setOnClickListener(new View.OnClickListener() { @SuppressLint("NotifyDataSetChanged") @Override @@ -90,8 +126,8 @@ public class ImageAdapter extends RecyclerView.Adapter { public void onBindViewHolder(@NonNull HomeVH holder, @SuppressLint("RecyclerView") int position) { String filePath = infoList.get(position).getPicture(); + Bitmap bitmap; if (filePath.startsWith("/data/user/")) { bitmap = BitmapFactory.decodeFile(filePath); } else { @@ -70,72 +71,46 @@ public class LikeAdapter extends RecyclerView.Adapter { .diskCacheStrategy(DiskCacheStrategy.ALL) .load(bitmap) .into(holder.imPreview); - new Thread(new Runnable() { - @Override - public void run() { - if (dao.getTaskByUrl(filePath) != null) { - Log.d("2323232", "run: " + dao.getTaskByUrl(filePath)); - ((Activity) mCon).runOnUiThread(new Runnable() { - @Override - public void run() { - holder.collect.setBackgroundResource(R.drawable.like); - } - }); - } + new Thread(() -> { + if (dao.getTaskByUrl(filePath) != null) { + Log.d("2323232", "run: " + dao.getTaskByUrl(filePath)); + ((Activity) mCon).runOnUiThread(() -> holder.collect.setImageResource(R.drawable.like)); } }).start(); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent(mCon, CameraActivity.class); - intent.putExtra("filePath", filePath); - mCon.startActivity(intent); - } + + holder.itemView.setOnClickListener(view -> { + Intent intent = new Intent(mCon, CameraActivity.class); + intent.putExtra("filePath", filePath); + mCon.startActivity(intent); }); - holder.collect.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new Thread(new Runnable() { - @Override - public void run() { - Favorite favorite1 = dao.getTaskByUrl(filePath); - if (favorite1 == null) { - favorite = new Favorite(); - favorite.setPicture(filePath); - AppDatabase.getDatabase(mCon).taskDao().insertTask(favorite); - Log.d("4444444", "run: " + position); - Log.d("4444444", "run: " + filePath); - ((Activity) mCon).runOnUiThread(new Runnable() { - @Override - public void run() { - holder.collect.setBackgroundResource(R.drawable.like); - Toast.makeText(mCon, "Successful collection", Toast.LENGTH_SHORT).show(); - } - }); - } else { - AppDatabase.getDatabase(mCon).taskDao().deleteTaskByUrl(filePath); + holder.collect.setOnClickListener(view -> new Thread(() -> { + Favorite favorite1 = dao.getTaskByUrl(filePath); + if (favorite1 == null) { + favorite = new Favorite(); + favorite.setPicture(filePath); + AppDatabase.getDatabase(mCon).taskDao().insertTask(favorite); + Log.d("4444444", "run: " + position); + Log.d("4444444", "run: " + filePath); + ((Activity) mCon).runOnUiThread(() -> holder.collect.setImageResource(R.drawable.like)); + } else { + AppDatabase.getDatabase(mCon).taskDao().deleteTaskByUrl(filePath); - infoList.remove(holder.getAdapterPosition()); - Log.d("4444444", "ru: " + filePath); - ((Activity) mCon).runOnUiThread(new Runnable() { - @Override - public void run() { - if (infoList.isEmpty()){ - activity.findViewById(R.id.like_background).setVisibility(View.VISIBLE); - activity.findViewById(R.id.like_text).setVisibility(View.VISIBLE); - } - notifyDataSetChanged(); - - Toast.makeText(mCon, "cancel collection", Toast.LENGTH_SHORT).show(); - } - }); - } + int positionToRemove = holder.getAdapterPosition(); + infoList.remove(positionToRemove); + Log.d("4444444", "ru: " + filePath); + ((Activity) mCon).runOnUiThread(() -> { + if (infoList.isEmpty()) { + activity.findViewById(R.id.like_background).setVisibility(View.VISIBLE); + activity.findViewById(R.id.like_text).setVisibility(View.VISIBLE); } - }).start(); + notifyItemRemoved(positionToRemove); + notifyItemRangeChanged(positionToRemove, infoList.size()); // Update the position of remaining items + }); } - }); + }).start()); } + /* private void updateFavoriteButton(ImageAdapter.ImageViewHolder holder, String imagePath) { LiveData favoriteImageLiveData = dao.getTaskByUrl(imagePath); favoriteImageLiveData.observe((LifecycleOwner) mCon, new Observer() { diff --git a/app/src/main/java/com/lh/painting/tool/ItemDecoration.java b/app/src/main/java/com/lh/painting/tool/ItemDecoration.java new file mode 100644 index 0000000..9d56c06 --- /dev/null +++ b/app/src/main/java/com/lh/painting/tool/ItemDecoration.java @@ -0,0 +1,96 @@ +package com.lh.painting.tool; + +import android.graphics.Rect; +import android.view.View; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +import com.lh.painting.MainApplication; + +// ItemDecoration 是一个自定义的 RecyclerView.ItemDecoration 类,用于在 RecyclerView 中为每个子项设置间距。 +public class ItemDecoration extends RecyclerView.ItemDecoration { + + // 垂直间距 (vertical spacing)、水平间距 (horizontal spacing) 和额外间距 (extra spacing):这里设置的是第一个的左边距,其它item根据剩余的距离均匀显示。 + private int v, h, ex; + + // 构造函数,传入 dp 值的垂直、水平和额外间距,并将它们转换为像素值。 + public ItemDecoration(int v, int h, int ex) { + // 将 dp 值转换为像素值并四舍五入 + this.v = Math.round(dpToPx(v)); + this.h = Math.round(dpToPx(h)); + this.ex = Math.round(dpToPx(ex)); + } + + // 重写 getItemOffsets 方法,用于为每个子项设置偏移量(间距)。 + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + + // 定义网格的列数(spanCount)、子项所占的列数(spanSize)以及子项在网格中的索引(spanIndex) + int spanCount = 1; // 列数默认为 1 + int spanSize = 1; // 子项所占列数默认为 1 + int spanIndex = 0; // 子项在网格中的索引默认为 0 + + // 获取子项在 Adapter 中的位置 + int childAdapterPosition = parent.getChildAdapterPosition(view); + // 获取 RecyclerView 的布局管理器 + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + + // 如果布局管理器是 StaggeredGridLayoutManager(交错网格布局管理器) + if (layoutManager instanceof StaggeredGridLayoutManager) { + StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager; + StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = staggeredGridLayoutManager.getSpanCount(); // 获取列数 + // 如果子项占据整行(isFullSpan),将 spanSize 设置为列数 + if (layoutParams.isFullSpan()) { + spanSize = spanCount; + } + spanIndex = layoutParams.getSpanIndex(); // 获取子项的索引 + + // 如果布局管理器是 GridLayoutManager(网格布局管理器) + } else if (layoutManager instanceof GridLayoutManager) { + GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; + GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = gridLayoutManager.getSpanCount(); // 获取列数 + spanSize = gridLayoutManager.getSpanSizeLookup().getSpanSize(childAdapterPosition); // 获取子项占据的列数 + spanIndex = layoutParams.getSpanIndex(); // 获取子项的索引 + + // 如果布局管理器是 LinearLayoutManager(线性布局管理器) + } else if (layoutManager instanceof LinearLayoutManager) { + // 设置子项的左、右和底部的间距 + outRect.left = v; + outRect.right = v; + outRect.bottom = h; + } + + // 如果子项占据整行(spanSize == spanCount),设置左、右和底部的间距 + if (spanSize == spanCount) { + outRect.left = v + ex; + outRect.right = v + ex; + outRect.bottom = h; + + // 如果子项不占据整行,根据网格布局计算左右间距 + } else { + // 计算每个子项的总间距(包括额外间距) + int itemAllSpacing = (v * (spanCount + 1) + ex * 2) / spanCount; + // 计算子项的左边距 + int left = v * (spanIndex + 1) - itemAllSpacing * spanIndex + ex; + // 计算子项的右边距 + int right = itemAllSpacing - left; + outRect.left = left; + outRect.right = right; + outRect.bottom = h; + } + } + + // 将 dp 值转换为像素值的方法 + public static float dpToPx(float dpValue) { + // 获取当前设备的屏幕密度(dpi) + float density = MainApplication.getContext().getResources().getDisplayMetrics().density; + // 通过公式 density * dp + 0.5f 将 dp 转换为像素,并返回结果 + return density * dpValue + 0.5f; + } +} diff --git a/app/src/main/java/com/lh/painting/tool/MyItemSpace.java b/app/src/main/java/com/lh/painting/tool/MyItemSpace.java deleted file mode 100644 index 6257cad..0000000 --- a/app/src/main/java/com/lh/painting/tool/MyItemSpace.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.lh.painting.tool; - -import android.graphics.Rect; -import android.view.View; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -public class MyItemSpace extends RecyclerView.ItemDecoration { - private int ex_space = 0; - private int v_space = 0; - private int h_space = 0; - - @Override - public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { - - int position = parent.getChildAdapterPosition(view); - int spanSize = 1; - int spanIndex = 0; - int spanCount = 1; - - RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); - - if (layoutManager instanceof GridLayoutManager) { - GridLayoutManager layoutManager1 = (GridLayoutManager) layoutManager; - GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); - spanCount = layoutManager1.getSpanCount(); - spanSize = layoutManager1.getSpanSizeLookup().getSpanSize(position); - spanIndex = layoutParams.getSpanIndex(); - - } - if (spanSize == spanCount) { - outRect.left = v_space + ex_space; - outRect.right = v_space + ex_space; - outRect.bottom = h_space; - } else { - int itemAllSpacing = (v_space * (spanCount + 1) + ex_space * 2) / spanCount; - int left = v_space * (spanIndex + 1) - itemAllSpacing * spanIndex + ex_space; - int right = itemAllSpacing - left; - outRect.left = left; - outRect.right = right; - outRect.bottom = h_space; - } - - } - - public MyItemSpace(int v_space, int h_space, int ex_space) { - this.ex_space = ex_space; - this.h_space = h_space; - this.v_space = v_space; - - } -} diff --git a/app/src/main/res/drawable/delete.xml b/app/src/main/res/drawable/delete.xml new file mode 100644 index 0000000..ac3e9f8 --- /dev/null +++ b/app/src/main/res/drawable/delete.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 45c16d9..200f519 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -54,7 +54,5 @@ android:id="@+id/view_pager2" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginStart="20dp" - android:layout_marginTop="20dp" - android:layout_marginEnd="20dp"/> + android:layout_marginTop="20dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_import.xml b/app/src/main/res/layout/activity_import.xml index 58c42f1..118ffbe 100644 --- a/app/src/main/res/layout/activity_import.xml +++ b/app/src/main/res/layout/activity_import.xml @@ -1,61 +1,63 @@ + android:background="@color/background"> + + android:layout_height="44dp" + android:background="@drawable/bg_circle"> + + android:layout_gravity="center" + android:src="@drawable/left_back" /> + + - + android:textSize="24sp" + android:textStyle="bold" /> + - + tools:ignore="ContentDescription" /> + + android:layout_centerHorizontal="true"> + + - + android:layout_height="wrap_content" + android:layout_below="@+id/text" + android:layout_marginTop="10dp"> + + android:background="@drawable/rounded_corners_import"> + - + android:src="@drawable/import_icon"> + - + android:textColor="@color/white"> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_my_favotrite.xml b/app/src/main/res/layout/activity_my_favotrite.xml index 5c2c197..580e09f 100644 --- a/app/src/main/res/layout/activity_my_favotrite.xml +++ b/app/src/main/res/layout/activity_my_favotrite.xml @@ -17,14 +17,14 @@ tools:ignore="InvalidId"> + android:src="@drawable/left_back" /> + android:src="@drawable/left_back" /> + + + + + + + + + + + + diff --git a/app/src/main/res/layout/adapter_home_vh.xml b/app/src/main/res/layout/adapter_home_vh.xml index 8a56cdd..0aea17d 100644 --- a/app/src/main/res/layout/adapter_home_vh.xml +++ b/app/src/main/res/layout/adapter_home_vh.xml @@ -3,36 +3,33 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/card" - android:layout_width="160dp" + android:layout_width="150dp" android:layout_height="146dp" app:cardCornerRadius="16dp" app:cardElevation="0dp"> - - + + android:layout_below="@id/collect" + android:layout_gravity="center_horizontal" + android:scaleType="centerCrop" + android:src="@mipmap/ic_launcher" + tools:ignore="ContentDescription" /> - - - - + + diff --git a/app/src/main/res/layout/fragment_painting.xml b/app/src/main/res/layout/fragment_painting.xml index 9105550..ed37575 100644 --- a/app/src/main/res/layout/fragment_painting.xml +++ b/app/src/main/res/layout/fragment_painting.xml @@ -1,5 +1,5 @@ - + android:layout_height="match_parent" + android:layout_marginBottom="30dp"/> - \ No newline at end of file + \ No newline at end of file