blob: 821d7ce4abcbc889a9e0eb0f81234d7f2b39373e [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.taobao.weex.ui.component.list;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.utils.WXViewUtils;
/**
* Created by furture on 2018/2/12.
* recyclerview's height is layout width + column gap,
* so the the offset should include, leftGap and rightGap is via this
*/
public class GapItemDecoration extends RecyclerView.ItemDecoration {
private WXListComponent listComponent;
public GapItemDecoration(WXListComponent listComponent) {
this.listComponent = listComponent;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
final Float[] spanOffsets = listComponent.getSpanOffsets();
if (spanOffsets == null) {
return;
}
int position = parent.getChildAdapterPosition(view);
if(position < 0) {
return;
}
if(view.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams){
StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
if(params.isFullSpan()){
return;
}
WXComponent component = listComponent.getChild(position);
if(component instanceof WXCell){
WXCell cell = (WXCell) component;
if(cell.isFixed() || cell.isSticky()) {
return;
}
if (params.getSpanIndex() >= spanOffsets.length) {
return;
}
float spanOffset = listComponent.getSpanOffsets()[params.getSpanIndex()];
int spanOffsetPx = Math.round(WXViewUtils.getRealPxByWidth(spanOffset, listComponent.getViewPortWidth()));
outRect.left = spanOffsetPx;
outRect.right = -spanOffsetPx;
}
}
}
}