小编tyl*_*ach的帖子

使用RecyclerView + AppBarLayout

我正在使用新的CoordinatorLayout与AppBarLayout和CollapsingToolbarLayout.在AppBarLayout下面,我有一个带有内容列表的RecyclerView.

我已经验证了当我在列表中上下滚动时,滚动滚动在RecyclerView上工作.但是,我还希望AppBarLayout在扩展期间顺利滚动.

向上滚动以展开CollaspingToolbarLayout时,一旦将手指从屏幕上抬起,滚动会立即停止.如果向上快速向上滚动,有时CollapsingToolbarLayout也会重新折叠.与使用NestedScrollView时,RecyclerView的这种行为似乎有很大不同.

我试图在recyclerview上设置不同的滚动属性,但我无法弄清楚这一点.

这是一个显示一些滚动问题的视频. https://youtu.be/xMLKoJOsTAM

这是一个显示RecyclerView(CheeseDetailActivity)问题的示例. https://github.com/tylerjroach/cheesesquare

以下是使用Chris Banes的NestedScrollView的原始示例. https://github.com/chrisbanes/cheesesquare

android android-appcompat android-layout android-design-library

171
推荐指数
5
解决办法
5万
查看次数

查找RecyclerView中第一个可见项目的顶部偏移量

我有一个RecyclerView + LinearLayoutManger,它使用一个包含聊天消息的适配器.我将聊天消息的数量限制在最近的100个.这个问题是,当我删除旧的聊天时,recyclerview中聊天的滚动位置会发生变化,因为索引0已被删除.我开始编写下面的代码:

int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
View v = layoutManager.getChildAt(firstVisiblePosition);
if (firstVisiblePosition > 0 && v != null) {
    int offsetTop = //need to get the view offset here;
    chatAdapter.notifyDataSetChanged();

    if (firstVisiblePosition - 1 >= 0 && chatAdapter.getItemCount() > 0) {
        layoutManager.scrollToPositionWithOffset(firstVisiblePosition - 1, offsetTop);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为获得第一个可见项目位置的可见偏移很容易.防爆.如果第一个可见视图是300dp但只有最后200dp是可见的,我想获得100偏移量.

这样我就可以使用scrollToPositionWithOffset(firstVisiblePosition - 1,offsetTop).

我在这里错过了什么吗?这似乎是一个很容易解决的问题,但我还没有看到任何方法可以支持这一点.

android android-recyclerview linearlayoutmanager

9
推荐指数
1
解决办法
2万
查看次数

消耗来自Okhttp的One-Shot ResponseBody会导致Retrofit出现问题

我正在使用带有Okhttp拦截器的Retrofit来检测我的oauth令牌是否已过期.如果令牌已过期,我想请求新令牌,再次尝试请求,然后将该响应发送到Retrofit.

这是我的拦截器类:

public class CustomInterceptor implements Interceptor {

@Override
public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();

    // try the request
    Response response = chain.proceed(request);

    if (response.body().string().contains(Constants.TOKEN_AUTH_ERROR_MESSAGE)) {
        Log.v("retrofit_error", "token expired");

        //get current token, create headers
        OAuthTokenResponse expiredToken = SharedPreferencesUtil.getOAuthToken();

        OAuthTokenResponse newOauthToken = RestClient.getInstance().getTokenService().refreshOauthToken(expiredToken.getRefreshToken());

        //store new token, return
        SharedPreferencesUtil.saveOAuthToken(newOauthToken);

        // create a new request and modify it accordingly using the new token
        Request.Builder newRequestBuilder = request.newBuilder()
                .removeHeader("Authorization");

        Request newRequest = newRequestBuilder.addHeader("Authorization", SharedPreferencesUtil.getOAuthToken().getAccessToken()).build();
        // retry the request
        return …
Run Code Online (Sandbox Code Playgroud)

java android retrofit okhttp

5
推荐指数
1
解决办法
2071
查看次数

Nexus 6前置摄像头倒置

我知道之前已经问过这个问题,但是,我找不到任何有效的解决方案.

Nexus 6前置摄像头始终显示在我的应用程序倒置.一些解决方案是使用" setDisplayOrientation",它会在屏幕上翻转相机.但是,我们使用frames收到的视频对视频进行编码onPreviewFrame.

按照Android SDK Documentation,setDisplayOrientation实际上并没有改变byte[]onPreviewFrame.

这不会影响onPreviewFrame(byte [],Camera),JPEG图片或录制视频中传递的字节数组的顺序.在预览期间不允许调用此方法.

如果无法获得Nexus 6前置摄像头onPreviewFrame框架correct orientation,那么fastest翻转每个框架的方式是什么,而不会出现fps下降.

谢谢!

android

5
推荐指数
1
解决办法
2252
查看次数