Python爬取网络图片
-直接上源码
1 | ''' |
diff --git "a/2020/02/04/\345\246\202\344\275\225\351\230\205\350\257\273\344\270\200\346\234\254\344\271\246/index.html" "b/2020/02/04/\345\246\202\344\275\225\351\230\205\350\257\273\344\270\200\346\234\254\344\271\246/index.html" index eaa97eb3..853db7d5 100644 --- "a/2020/02/04/\345\246\202\344\275\225\351\230\205\350\257\273\344\270\200\346\234\254\344\271\246/index.html" +++ "b/2020/02/04/\345\246\202\344\275\225\351\230\205\350\257\273\344\270\200\346\234\254\344\271\246/index.html" @@ -107,7 +107,7 @@
-直接上源码
1 | ''' |
1 | import android.os.Bundle |
1 | import android.view.View |
Android专栏-BaseQuickAdapterHelper
https://denchopen.github.io/blog/2021/05/25/Android专栏-BaseQuickAdapterHelper/
1 | import android.view.View |
Android专栏-BaseQuickAdapterHelper
https://denchopen.github.io/blog/2021/05/25/Android专栏-BaseQuickAdapterHelper/
这个自定义布局要求显示为 系列名称... + 第一季
,后面的季内容显示完全,紧贴系列名称显示,系列名称在布局不允许的时候可以部分显示。
1 | /** |
1 | import android.content.res.Resources |
RecyclerView的几种Decoration
https://denchopen.github.io/blog/2021/06/17/RecyclerView的几种Decoration/
1 | java.lang.IllegalStateException: FragmentManager is already executing transactions |
1 | java.lang.IllegalStateException: FragmentManager is already executing transactions |
解决方案
如果在 Fragment 中使用 ViewPager2,那么 FragmentStateAdapter 应该使用 childFragmentManager。将
@@ -42,40 +42,48 @@改为
1 | FragmentStateAdapter viewPagerAdapter = new FragmentStateAdapter(getChildFragmentManager(), titles); |
原因分析:
-因为 FragmentStateAdapter 会保存所有Fragment实例,当调用 Adapter.notifyDataSetChanged()
方法时,Fragment 并没有走 onCreate
方法。
原因分析:
+因为 FragmentStateAdapter 会保存所有 Fragment 实例,当调用 Adapter.notifyDataSetChanged()
方法时,Fragment 并没有走 onCreate
方法。
解决方案:
-方案一(这个方法会导致内存泄漏,不推荐)
方案一(这个方法会导致内存泄漏,不推荐)
在调用 notifyDataSetChanged
之前,清空 FragmentStateAdapter 的 Fragment 列表。
方案二
重写 getItemId()
containsItem()
这两个方法,并确保 getItemId()
的值是唯一的。
1 | override fun createViewPagerAdapter(): RecyclerView.Adapter<*> { |
1 | java.lang.IllegalStateException: Design assumption violated. |
解决方案:
-如果重写了 getItemId()
containsItem()
这两个方法,确保 getItemId()
的值是唯一的。代码同0x02
如果重写了 getItemId()
containsItem()
这两个方法,确保 getItemId()
的值是唯一的。代码同 0x02
原因分析:
-同方向滚动事件被ViewPager2拦截了。
+同方向滚动事件被 ViewPager2 拦截了。
解决方案:
-采用官方提供的自定义 NestedScrollableHost
来包一层 RecyclerView
采用官方提供的自定义 NestedScrollableHost
来包一层 RecyclerView
1 | import android.content.Context |
对应的layout代码:
+对应的 layout 代码:
1 |
|
自定义 NestedRecyclerView
的分发事件通过 requestDisallowInterceptTouchEvent()
方法来限制父布类的拦截事件
1 | public class NestedRecyclerView extends RecyclerView { |
自定义 NestedRecyclerView
的分发事件通过 requestDisallowInterceptTouchEvent()
方法来限制父布类的拦截事件
1 | public class NestedRecyclerView extends RecyclerView { |
降级,使用 ViewPager 来嵌套 RecyclerView ,可以避免事件冲突,亲测有效。
+1 | import android.os.Bundle |
在 Fragment 中使用 ViewPager 的时候,切换 Fragment 导致 ViewPager 无法正确恢复异常
+1 | java.lang.IllegalStateException: Fragment no longer exists for key f1: unique id 55efaee5-a65c-4e57-9281-7c8f8f6e4156 |
降级,使用 ViewPager 来嵌套 RecyclerView ,可以避免事件冲突,亲测有效。
-1 | import android.os.Bundle |
在这个页面中,内容列表使用 ViewPager 嵌套 Fragment 实现,并和时间选择 Tab 绑定。切换【即将上线】和【播出时间表】Tab,实际是使用 FragmentManager 的 replace 方法,动态切换两个 Fragment,然后就报了上面的异常。
+网上流行的解决方案是使用 FragmentPagerAdapter 或者添加
+1 |
|
Problems专题:ViewPager2
https://denchopen.github.io/blog/2021/06/20/Problems专题之ViewPager2/
提供了注册加载更多,和判断是否不足一屏等工具方法
-1 | import androidx.recyclerview.widget.GridLayoutManager |
RecyclerViewHelper
https://denchopen.github.io/blog/2021/08/23/RecyclerViewHelper/
1、msg 可空String解析 jsonReader.peek() == JsonToken.NULL
1 | import com.google.gson.Gson |
1 | import android.content.ComponentName |
SettingsHelper
项目地址:https://github.com/lzyzsd/JsBridge
使用参考:https://www.jianshu.com/p/7aea03838f19
解决方案:
App层销毁当前的WebView,重新加载一个新的WebView去loadUrl。
1 | // js-bridge register error |
https://developer.umeng.com/docs
qqzone_id_value 配置跟当前应用对应不上,PlatformConfig.setQQZone(qqzone_id_value, qqzone_secret_id_value)
根据滑动位置动态改变背景透明度,直接上代码:
1 | binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { |
RecyclerView 根据滑动位置动态改变背景透明度
https://denchopen.github.io/blog/2022/06/27/RecyclerView根据滑动位置动态改变背景透明度/
使用JDK签名工具jarsigner签名APK文件 jarsigner -verbose -keystore [签名文件路径] -signedjar [签名后的apk文件路径] [未签名的apk文件路径] [证书别名]
1 | jarsigner -verbose -keystore D:\xxx\xxx.jks -signedjar D:\xxx\xxx_signed.apk D:\xxx\***.apk keyAlias |
APK签名之jarsigner签名工具
https://denchopen.github.io/blog/2023/01/10/APK签名之jarsigner签名工具/
工具类,提供了系统栏高度和屏幕宽高获取方法
1 |
|
SystemBarUtil 工具类
https://denchopen.github.io/blog/2023/02/15/工具类-SystemBarUtil/
通过 java.security 包下的MessageDigest
工具,可以简单快捷的直接计算出文件的MD5值
1 | fun getFileMd5(path: String?): String? { |
1 | private static char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; |
Windows 10 专业版 64 位操作系统
+11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz (8 核)
+Intel(R) UHD Graphics 750
+Download and install
git
and
Python 3.10.6
(tick Add to PATH)
https://pytorch.org/get-started/locally/
+由于当前 PC 的显卡不是英伟达,所以下载的 tarch 版本是 cup 版本
+检测 pytorch 是否安装成功
+1 | python # 打开python环境 |
没有报异常即说明安装成功
+https://github.com/AUTOMATIC1111/stable-diffusion-webui
+由于当前 PC 的 CUP 和 GPU 都是 Intel,所以下载 openvino 版本
+1 | git clone https://github.com/openvinotoolkit/stable-diffusion-webui.git |
现在我们还需要一个训练好的 AI 模型来指导生成效果,在如下网站中可以下载到很多训练好的模型:
+ +选择一个感兴趣的模型,下载好的,将模型文件放入工程目录下的 models/Stable-diffusion
文件夹下面即可。
下面可以尝试运行下此 Web 项目,在工程目录下执行:
+1 | .\webui-user.bat |
执行完成后,在浏览器打开如下地址:
+ +选择自定义脚本 Accelerate with OpenVINO
,按照文档配置相关参数。之后就可体验 stable-diffusion 生成图片了。
Good Luck.
+Windows 部署 AIGC 图片生成服务——基于 stable-diffusion
https://denchopen.github.io/blog/2024/03/07/Windows部署stable-diffusion/
Update your browser to view this website correctly.&npsb;Update my browser now