Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds-android
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
云深项目组
beyond-clouds-android
Commits
cee53512
Commit
cee53512
authored
Mar 17, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
自定义布局DynamicGridLayout完成
parent
fd9ae6fb
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
170 additions
and
3 deletions
+170
-3
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/DynamicListRecyclerViewAdapter.java
+5
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/view/DynamicGridLayout.java
+146
-0
app/src/main/res/layout/post_item.xml
+18
-3
app/src/main/res/layout/swipe_refresh_list.xml
+1
-0
No files found.
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/DynamicListRecyclerViewAdapter.java
View file @
cee53512
...
@@ -86,6 +86,11 @@ public class DynamicListRecyclerViewAdapter extends BaseQuickAdapter<Post,BaseVi
...
@@ -86,6 +86,11 @@ public class DynamicListRecyclerViewAdapter extends BaseQuickAdapter<Post,BaseVi
Glide
.
with
(
binding
.
getRoot
()).
load
(
post
.
getUserAvatar
()).
apply
(
options
).
into
(
binding
.
imgUserAvatar
);
Glide
.
with
(
binding
.
getRoot
()).
load
(
post
.
getUserAvatar
()).
apply
(
options
).
into
(
binding
.
imgUserAvatar
);
}
}
if
(
null
!=
post
.
getPictures
()
&&
post
.
getPictures
().
size
()
>
0
)
{
binding
.
dynamicGridLayout
.
setImages
(
post
.
getPictures
());
}
else
{
binding
.
dynamicGridLayout
.
clear
();
}
}
}
static
class
TopicLinkClickable
extends
ClickableSpan
{
static
class
TopicLinkClickable
extends
ClickableSpan
{
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/view/DynamicGridLayout.java
0 → 100644
View file @
cee53512
package
cn
.
yunliyunwai
.
beyondclouds
.
view
;
import
android.content.Context
;
import
android.os.Build
;
import
android.util.AttributeSet
;
import
android.view.ViewGroup
;
import
android.widget.ImageView
;
import
androidx.annotation.RequiresApi
;
import
com.bumptech.glide.Glide
;
import
com.bumptech.glide.Priority
;
import
com.bumptech.glide.load.engine.DiskCacheStrategy
;
import
com.bumptech.glide.request.RequestOptions
;
import
java.util.List
;
import
cn.yunliyunwai.beyondclouds.R
;
/**
* 动态九宫格布局
*/
public
class
DynamicGridLayout
extends
ViewGroup
{
private
int
mRow
;
private
int
mCol
;
private
int
mSpacing
;
List
<
String
>
mImgUrls
;
public
DynamicGridLayout
(
Context
context
)
{
super
(
context
);
}
public
DynamicGridLayout
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
initAttrs
(
context
,
attrs
);
}
public
DynamicGridLayout
(
Context
context
,
AttributeSet
attrs
,
int
defStyleAttr
)
{
super
(
context
,
attrs
,
defStyleAttr
);
initAttrs
(
context
,
attrs
);
}
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
LOLLIPOP
)
public
DynamicGridLayout
(
Context
context
,
AttributeSet
attrs
,
int
defStyleAttr
,
int
defStyleRes
)
{
super
(
context
,
attrs
,
defStyleAttr
,
defStyleRes
);
initAttrs
(
context
,
attrs
);
}
private
void
initAttrs
(
Context
context
,
AttributeSet
attrs
)
{
mSpacing
=
(
int
)
(
6
*
context
.
getResources
().
getDisplayMetrics
().
density
);
}
@Override
protected
void
onLayout
(
boolean
changed
,
int
l
,
int
t
,
int
r
,
int
b
)
{
if
(!
hasImages
())
{
return
;
}
// 计算布局尺寸
int
maxWidth
=
MeasureSpec
.
getSize
(
getMeasuredWidth
());
// 每个图片的尺寸
int
imageSize
=
(
maxWidth
-
(
mCol
-
1
)
*
mSpacing
)
/
mCol
;
int
layoutHeight
=
imageSize
*
mRow
+
(
mRow
-
1
)
*
mSpacing
;
LayoutParams
layoutParams
=
getLayoutParams
();
layoutParams
.
height
=
layoutHeight
;
setLayoutParams
(
layoutParams
);
int
currentRow
,
currentCol
;
for
(
int
i
=
0
;
i
<
mImgUrls
.
size
();
i
++)
{
currentRow
=
i
/
mCol
;
currentCol
=
i
-
(
currentRow
*
mCol
);
ImageView
imageView
=
new
ImageView
(
this
.
getContext
());
RequestOptions
options
=
new
RequestOptions
()
.
centerCrop
()
.
placeholder
(
R
.
drawable
.
placeholder_square
)
.
error
(
R
.
drawable
.
placeholder_square
)
.
priority
(
Priority
.
HIGH
)
.
diskCacheStrategy
(
DiskCacheStrategy
.
AUTOMATIC
);
Glide
.
with
(
this
).
load
(
mImgUrls
.
get
(
i
)).
apply
(
options
).
into
(
imageView
);
this
.
addView
(
imageView
,
new
LayoutParams
(
imageSize
,
imageSize
));
int
left
=
computePosition
(
currentCol
,
imageSize
);
int
top
=
computePosition
(
currentRow
,
imageSize
);
imageView
.
setScaleType
(
ImageView
.
ScaleType
.
CENTER_CROP
);
imageView
.
layout
(
left
,
top
,
left
+
imageSize
,
top
+
imageSize
);
}
}
private
int
computePosition
(
int
directionIndex
,
int
imageSize
)
{
return
(
imageSize
+
mSpacing
)
*
directionIndex
;
}
public
void
setImages
(
List
<
String
>
imgUrls
)
{
removeAllViewsInLayout
();
this
.
mImgUrls
=
imgUrls
;
LayoutParams
layoutParams
=
getLayoutParams
();
if
(!
hasImages
())
{
layoutParams
.
height
=
0
;
setLayoutParams
(
layoutParams
);
return
;
}
initGridParams
();
requestLayout
();
}
/**
* 求出行数和列数
*/
private
void
initGridParams
()
{
if
(!
hasImages
())
{
return
;
}
int
size
=
mImgUrls
.
size
();
if
(
size
<=
3
)
{
mRow
=
1
;
mCol
=
size
;
}
else
if
(
size
<=
6
)
{
mRow
=
2
;
mCol
=
3
;
}
else
{
mRow
=
3
;
mCol
=
3
;
}
}
public
void
clear
()
{
setImages
(
null
);
}
public
boolean
hasImages
()
{
return
null
!=
mImgUrls
&&
mImgUrls
.
size
()
>
0
;
}
public
int
getImageCount
()
{
return
mImgUrls
.
size
();
}
}
app/src/main/res/layout/post_item.xml
View file @
cee53512
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
android:layout_marginLeft=
"60dp"
android:layout_marginLeft=
"60dp"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
android:textColor=
"@color/colorTextAccent"
android:textColor=
"@color/colorTextAccent"
android:textSize=
"1
4
sp"
android:textSize=
"1
5
sp"
android:gravity=
"center_vertical"
android:gravity=
"center_vertical"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"22dp"
/>
android:layout_height=
"22dp"
/>
...
@@ -61,7 +61,7 @@
...
@@ -61,7 +61,7 @@
android:text=
"SpringBoot迭代发布JRA瘦身配置"
android:text=
"SpringBoot迭代发布JRA瘦身配置"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:textSize=
"1
4
sp"
android:textSize=
"1
5
sp"
android:textColorHint=
"@color/colorPrimaryTouched"
android:textColorHint=
"@color/colorPrimaryTouched"
android:linksClickable=
"true"
android:linksClickable=
"true"
android:textColorHighlight=
"@color/colorBackgroundTopicTouched"
android:textColorHighlight=
"@color/colorBackgroundTopicTouched"
...
@@ -71,6 +71,7 @@
...
@@ -71,6 +71,7 @@
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
/>
/>
<androidx.constraintlayout.widget.Barrier
<androidx.constraintlayout.widget.Barrier
android:id=
"@+id/barrier_content"
android:id=
"@+id/barrier_content"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
...
@@ -80,9 +81,23 @@
...
@@ -80,9 +81,23 @@
tools:layout_editor_absoluteX=
"12dp"
tools:layout_editor_absoluteX=
"12dp"
tools:layout_editor_absoluteY=
"16dp"
/>
tools:layout_editor_absoluteY=
"16dp"
/>
<cn.yunliyunwai.beyondclouds.view.DynamicGridLayout
android:id=
"@+id/dynamic_grid_layout"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/barrier_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
<androidx.constraintlayout.widget.Barrier
android:id=
"@+id/barrier_dynamic_grid"
app:constraint_referenced_ids=
"dynamic_grid_layout"
app:barrierDirection=
"bottom"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
<View
<View
android:layout_marginTop=
"18dp"
android:layout_marginTop=
"18dp"
app:layout_constraintTop_toBottomOf=
"@id/barrier_
content
"
app:layout_constraintTop_toBottomOf=
"@id/barrier_
dynamic_grid
"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
android:layout_width=
"0dp"
android:layout_width=
"0dp"
...
...
app/src/main/res/layout/swipe_refresh_list.xml
View file @
cee53512
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
<androidx.recyclerview.widget.RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/recycler_view"
android:id=
"@+id/recycler_view"
app:fastScrollEnabled=
"false"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:scrollbars=
"vertical"
/>
android:scrollbars=
"vertical"
/>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment