Skip to content

Instantly share code, notes, and snippets.

@Viyu
Created January 19, 2015 02:09
Show Gist options
  • Save Viyu/3af499b51318128d1aab to your computer and use it in GitHub Desktop.
Save Viyu/3af499b51318128d1aab to your computer and use it in GitHub Desktop.
Grid item view holder for GirdView which show the border lines properly.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/line_top"
android:layout_width="match_parent"
android:layout_height="@dimen/grid_item_line"
android:layout_alignParentTop="true"
android:background="@color/line_color" />
<View
android:id="@+id/line_bottom"
android:layout_width="match_parent"
android:layout_height="@dimen/grid_item_line"
android:layout_alignParentBottom="true"
android:background="@color/line_color" />
<View
android:id="@+id/line_left"
android:layout_width="@dimen/grid_item_line"
android:layout_height="@dimen/home_grid_item_height"
android:layout_alignParentLeft="true"
android:background="@color/line_color" />
<View
android:id="@+id/line_right"
android:layout_width="@dimen/grid_item_line"
android:layout_height="@dimen/home_grid_item_height"
android:layout_alignParentRight="true"
android:background="@color/line_color" />
<FrameLayout
android:id="@+id/content_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/home_grid_item_height"
android:layout_centerInParent="true" >
</FrameLayout>
</RelativeLayout>
public class GridItemView {
private View mView = null;
private FrameLayout mContentLayout = null;
private View mTopLine = null;
private View mBottomLine = null;
private View mLeftLine = null;
private View mRightLine = null;
public GridItemView(LayoutInflater inflater, int contentLayoutResId) {
mView = inflater.inflate(R.layout.framework_view_griditem, null);
mView.setTag(this);
//
mContentLayout = (FrameLayout) mView.findViewById(R.id.content_layout);
mContentLayout.addView(inflater.inflate(contentLayoutResId, null));
//
mTopLine = (View) mView.findViewById(R.id.line_top);
mBottomLine = (View) mView.findViewById(R.id.line_bottom);
mLeftLine = (View) mView.findViewById(R.id.line_left);
mRightLine = (View) mView.findViewById(R.id.line_right);
}
public void setLineVisible(int totalCount, int columnCount, int position) {
// 只有一个item
if (totalCount < 2) {
mTopLine.setVisibility(View.VISIBLE);
mBottomLine.setVisibility(View.VISIBLE);
mLeftLine.setVisibility(View.VISIBLE);
mRightLine.setVisibility(View.VISIBLE);
return;
}
// 只有一行
if (totalCount == columnCount) {
mTopLine.setVisibility(View.VISIBLE);
mBottomLine.setVisibility(View.VISIBLE);
mRightLine.setVisibility(View.VISIBLE);
if (position == 0) {// 第一个
mLeftLine.setVisibility(View.VISIBLE);
} else {// 后面的
mLeftLine.setVisibility(View.GONE);
}
return;
}
// 只有一列
if (columnCount < 2) {
mLeftLine.setVisibility(View.VISIBLE);
mRightLine.setVisibility(View.VISIBLE);
mBottomLine.setVisibility(View.VISIBLE);
if (position == 0) {// 第一个
mTopLine.setVisibility(View.VISIBLE);
} else {// 后面的
mTopLine.setVisibility(View.GONE);
}
return;
}
// 至少两行两列
if (position == 0) {// 0, 0
mLeftLine.setVisibility(View.VISIBLE);
mRightLine.setVisibility(View.VISIBLE);
mTopLine.setVisibility(View.VISIBLE);
mBottomLine.setVisibility(View.VISIBLE);
} else if (position / columnCount == 0) {// 第一行
mLeftLine.setVisibility(View.GONE);
mRightLine.setVisibility(View.VISIBLE);
mTopLine.setVisibility(View.VISIBLE);
mBottomLine.setVisibility(View.VISIBLE);
} else if(position % columnCount == 0) {//第一列
mLeftLine.setVisibility(View.VISIBLE);
mRightLine.setVisibility(View.VISIBLE);
mTopLine.setVisibility(View.GONE);
mBottomLine.setVisibility(View.VISIBLE);
} else {//其他的
mLeftLine.setVisibility(View.GONE);
mRightLine.setVisibility(View.VISIBLE);
mTopLine.setVisibility(View.GONE);
mBottomLine.setVisibility(View.VISIBLE);
}
}
public View findViewOfContentById(int id) {
return mContentLayout.findViewById(id);
}
public View getView() {
return mView;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment