我可以使用Picasso库从文件系统加载图像吗?
我startActivityForResult用来让用户从他的图库中选择一张照片,然后想要显示所选图像.
我已经有了工作代码来获取图像文件系统Uri,但无法使该Picasso.load()方法工作.
我正在研究提高性能的方法EditText,特别是在加载时间方面.当加载几千字或更多字的大型文档时,调用setText可以在我的一些测试设备和模拟器上冻结UI几秒钟.
作为回应,我已经探索了几种可能的解决方案,但都没有产生令人满意的结果.我试图按段落拆分大型文档,并将每个段落加载到自己的行RecyclerView或ListView行中.由于导致滚动不稳定的问题,RecyclerView完全没有希望.ListView提供了很好的,几乎是即时的加载时间,以及非常好的滚动(虽然不如一个EditText块好),但是存在一个问题,即EditText行内的块在选中时会失去焦点.我也试图更新EditText从部分onProgressUpdate在AsyncTask,希望用户可以用文字,因为它加载的部分进行交互,但加载时间基本上不受影响.
我探索过的最有希望的途径涉及改变以下元素AndroidManifest.xml:
android:hardwareAccelerated="false"
Run Code Online (Sandbox Code Playgroud)
我在Google开发者频道上观看此YouTube视频片段中的以下片段后得到了这个想法.当我打开GPU Profile渲染时,我发现橙色条(代表"处理时间")每次都setText被调用.当我关闭硬件加速时,setText性能大幅提升,尽管其他领域(如滚动)变得更糟.
我想了解的是 - 为什么会发生这种情况?另外,有没有办法可以使用这些信息来进一步提高性能?我可以简单地以编程方式关闭和打开硬件加速吗?
值得一提的是,一些设备,如运行API 22的Nexus 7,在大型文档上调用setText时不会遇到任何问题,而其他设备真的很难加速硬件加速.我只想了解更好的情况,以便我可以尝试解决它!谢谢.
编辑:
这是一个GitHub存储库的链接,供任何人下载我的一个示例测试应用程序以复制我上面列出的问题.我还在网站上发布了三个视频,展示了这些问题,我将在下面进行讨论:
我做了三个视频演示,显示上运行这个程序, 华为Honor运行冬青4.4.2奇巧与
hardwareAccelerated设置属性true的AndroidManifest,然后用相同的手机设置为相同的属性false,以及一个独立的Nexus 7(2013)运行Lollipop 5.1启用了硬件加速功能.GPU分析在每种情况下都会启用.
我正在尝试RecyclerView使用Helper扩展的类在我的行中创建动画ItemTouchHelper.Callback.
默认的"滑动"行为ItemTouchHelper是,如果以足够的速度滑动一行,它将从视图中消失(即,滑动到dimiss).在我的情况下,我想创建一个动画,如果发生这样的事件,导致行直接反弹.
我已经能够创建一个ValueAnimator动画,如果它在屏幕上滑动,将该行动画回视图.但是,问题在于我无法让父ItemTouchHelper类识别x它存储的值已从行的宽度(因此它完全在屏幕外)更改为0(以便它返回到屏幕上).
这意味着每当我在完成自定义动画后与行进行交互时,它就像行仍然在屏幕外,即使它完全可见.这通常意味着按下它意味着行从一个X位置跳到行宽0的X位置,因此再次从屏幕边缘重新生成动画.在完全重置并再次正常运行之前,它会执行此操作几次.
该视频将有助于显示问题.由于前两次滑动不在屏幕外,因此默认行为有效.然后将行从屏幕上滑下并反弹回来,点击该行会显示它从右边缘向后ping:
这是我用来进行动画的代码:
public class CustomItemTouchHelper extends ItemTouchHelper.Callback {
private RecoverAnimation ra;
private boolean animatorRunning;
//...
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
final float per = (dX/viewHolder.itemView.getWidth());
if (per > 0.8F && !animatorRunning && !isCurrentlyActive) {
ra = new RecoverAnimation(c, recyclerView, viewHolder, ItemTouchHelper.ANIMATION_TYPE_SWIPE_CANCEL, …Run Code Online (Sandbox Code Playgroud) 如何在Android中获取元素ID
<EditText
android:id="@+id/etCustomerNo"
Run Code Online (Sandbox Code Playgroud)
我需要在活动中访问editText的ID(例如,将“ etCustomerNo”获取为字符串)。谢谢。
我需要知道布局上所有editText的ID
for (int i = 0; i < rl.getChildCount(); i++) {
if (rl.getChildAt(i) instanceof EditText) {
String id = String.valueOf(rl.getChildAt(i).getId());
}
}
Run Code Online (Sandbox Code Playgroud)
getId()返回一个int值而不是"etCustomerNo"