编辑:真正的问题是我LinearLayout被另一个布局包裹,导致不正确的行为.Sanvywell接受的答案有一个更好,更完整的例子,说明如何在刷卡视图下绘制颜色,而不是我在问题中提供的代码片段.
现在,在ItemTouchHelper类的帮助下,RecyclerView小部件本身支持行扫描,我试图在应用程序中使用它,行的行为与Google的收件箱应用程序类似.也就是说,向左侧滑动执行一个动作,向右滑动则执行另一个动作.
使用ItemTouchHelper.SimpleCallback的onSwiped方法很容易实现动作本身.但是,我无法找到一种简单的方法来设置应该出现在当前正在刷卡的视图下方的颜色和图标(例如在谷歌的收件箱应用程序中).
要做到这一点,我试图覆盖ItemTouchHelper.SimpleCallback的onChildDraw方法,如下所示:
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY,
int actionState, boolean isCurrentlyActive) {
RecyclerViewAdapter.ViewHolder vh = (RecyclerViewAdapter.ViewHolder) viewHolder;
LinearLayout ll = vh.linearLayout;
Paint p = new Paint();
if(dX > 0) {
p.setARGB(255, 255, 0, 0);
} else {
p.setARGB(255, 0, 255, 0);
}
c.drawRect(ll.getLeft(), ll.getTop(), ll.getRight(), ll.getBottom(), p);
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); …Run Code Online (Sandbox Code Playgroud) android android-layout android-canvas android-support-library android-recyclerview
我们需要存储和检索用户在线使用我们的应用生成的内容.为此,我们决定使用Android Studio的集成Google Cloud Endpoints模板快速创建API(此处为官方用法示例).
它在调试中工作正常,但在发布模式下,启用Proguard后,它会失败.更糟糕的是,我没有找到任何关于在Android Studio的Endpoints模板中使用Proguard的文档或示例.
经过一个小时左右的探索并尝试使其工作,proguard-rules.pro现在看起来像这样:
-keep class com.google.api.** { public *; }
-dontwarn com.google.api.**
-keep class com.google.common.** { public *; }
-dontwarn com.google.common.**
# Not allowed to post company and app names, but this line is correct in the real file
-keep class com.companyname.appname.application.backend.** { *; }
Run Code Online (Sandbox Code Playgroud)
使用此配置,我在我的类中获得了一个类强制转换异常ArrayAdapter:
java.lang.ClassCastException: com.google.api.client.util.ArrayMap cannot be cast to com.companyname.appname.application.backend.messageApi.model.Message
Run Code Online (Sandbox Code Playgroud)
这似乎不是什么地方执行返回的数据转换和,而不是一个List的Message对象,我得到List的com.google.api.client.util.ArrayMap对象(它们确实包含有效数据,顺便说一句).
我可以检查应用程序是否在发布模式下运行并手动进行转换,但是,这是一种hacky方式,我宁愿正确地执行此操作.那么,有人可以告诉我Proguard配置文件中缺少什么吗?
google-app-engine android proguard google-cloud-endpoints android-studio
我正在开发一款游戏(以及我自己的定制引擎).我有很多资产(纹理,骨架动画等),它们被多个模型使用,因此可以多次加载.
起初,我的野心更小,游戏更简单,我可以忍受一点点复制,所以shared_ptr一旦最后一个实例消失,它就会处理资源清理似乎是一个好主意.随着我的游戏的增长,越来越多的资源被多次加载,所有OpenGL状态的变化都将性能降低到了爬行状态.为了解决这个问题,我决定写一个资产管理器类.
我正在使用a unordered_map存储文件路径,std::string而c ++ 11 shared_ptr指向实际加载的资源.如果文件已经加载,我返回指针,如果没有,我调用相应的Loader类.干净利落.
不幸的是,我不能对删除说同样的话.指针的一个副本仍保留在unordered_map.目前,我遍历整个地图并.unique()每帧执行检查.这些指针结果是唯一的,从地图中删除,破坏最后一个副本并强制析构函数运行并进行清理.
迭代数百或数千个对象并不是最有效的方法.(这不是一个过早的优化,我现在处于优化阶段)是否有可能以某种方式覆盖共享指针功能?例如,以某种方式添加"onLastRemains"事件?也许我应该遍历unordered_map每一帧的一部分(通过桶)?还有其他方法吗?
我知道,我可以尝试编写自己的引用计数资产实现,但我所有的当前代码都假设资产是共享指针.此外,共享指针非常出色,所以为什么要重新发明轮子呢?