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
0a5e364b
Commit
0a5e364b
authored
Mar 12, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
搜索框组件完成
parent
35b557d8
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
213 additions
and
91 deletions
+213
-91
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/CategoryFragmentAdapter.java
+37
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/HomeNavigatorAdapter.java
+54
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/HomeFragment.java
+5
-78
app/src/main/java/cn/yunliyunwai/beyondclouds/view/ScaleTransitionPagerTitleView.java
+13
-6
app/src/main/java/cn/yunliyunwai/beyondclouds/view/SearchBar.java
+40
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/HomeFragmentViewModel.java
+1
-6
app/src/main/res/layout/beyond_search_bar.xml
+53
-0
app/src/main/res/layout/fragment_home.xml
+8
-1
app/src/main/res/values/colors.xml
+2
-0
No files found.
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/CategoryFragmentAdapter.java
0 → 100644
View file @
0a5e364b
package
cn
.
yunliyunwai
.
beyondclouds
.
adapter
;
import
android.os.Bundle
;
import
androidx.annotation.NonNull
;
import
androidx.fragment.app.Fragment
;
import
androidx.fragment.app.FragmentManager
;
import
androidx.fragment.app.FragmentStatePagerAdapter
;
import
java.util.List
;
import
cn.yunliyunwai.beyondclouds.data.model.BlogCategory
;
import
cn.yunliyunwai.beyondclouds.ui.HomeFragment
;
public
class
CategoryFragmentAdapter
extends
FragmentStatePagerAdapter
{
private
List
<
BlogCategory
>
categories
;
public
CategoryFragmentAdapter
(
@NonNull
FragmentManager
fm
,
List
<
BlogCategory
>
categories
)
{
super
(
fm
,
BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
);
this
.
categories
=
categories
;
}
@NonNull
@Override
public
Fragment
getItem
(
int
position
)
{
HomeFragment
.
BlogListFragment
fragment
=
HomeFragment
.
BlogListFragment
.
newInstance
();
Bundle
bundle
=
new
Bundle
();
bundle
.
putString
(
"text"
,
categories
.
get
(
position
).
getCategory
());
fragment
.
setArguments
(
bundle
);
return
fragment
;
}
@Override
public
int
getCount
()
{
return
categories
.
size
();
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/HomeNavigatorAdapter.java
0 → 100644
View file @
0a5e364b
package
cn
.
yunliyunwai
.
beyondclouds
.
adapter
;
import
android.content.Context
;
import
androidx.viewpager.widget.ViewPager
;
import
net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter
;
import
net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerIndicator
;
import
net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerTitleView
;
import
java.util.List
;
import
cn.yunliyunwai.beyondclouds.R
;
import
cn.yunliyunwai.beyondclouds.data.model.BlogCategory
;
import
cn.yunliyunwai.beyondclouds.view.CommonPagerIndicator
;
import
cn.yunliyunwai.beyondclouds.view.ScaleTransitionPagerTitleView
;
public
class
HomeNavigatorAdapter
extends
CommonNavigatorAdapter
{
private
List
<
BlogCategory
>
categories
;
private
ViewPager
viewPager
;
public
HomeNavigatorAdapter
(
List
<
BlogCategory
>
categories
,
ViewPager
viewPager
)
{
this
.
categories
=
categories
;
this
.
viewPager
=
viewPager
;
}
@Override
public
int
getCount
()
{
return
categories
.
size
();
}
@Override
public
IPagerTitleView
getTitleView
(
Context
context
,
int
index
)
{
ScaleTransitionPagerTitleView
scaleTransitionPagerTitleView
=
ScaleTransitionPagerTitleView
.
createDefaultTitleView
(
context
);
scaleTransitionPagerTitleView
.
setText
(
categories
.
get
(
index
).
getCategory
());
scaleTransitionPagerTitleView
.
setOnClickListener
(
view
->
viewPager
.
setCurrentItem
(
index
));
return
scaleTransitionPagerTitleView
;
}
@Override
public
IPagerIndicator
getIndicator
(
Context
context
)
{
CommonPagerIndicator
indicator
=
new
CommonPagerIndicator
(
context
);
float
density
=
context
.
getResources
().
getDisplayMetrics
().
density
;
indicator
.
setIndicatorDrawable
(
context
.
getResources
().
getDrawable
(
R
.
drawable
.
tab_indicator
));
indicator
.
setMode
(
CommonPagerIndicator
.
MODE_EXACTLY
);
indicator
.
setDrawableHeight
(
2
*
density
);
indicator
.
setDrawableWidth
(
8
*
density
);
return
indicator
;
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/HomeFragment.java
View file @
0a5e364b
package
cn
.
yunliyunwai
.
beyondclouds
.
ui
;
import
android.content.Context
;
import
android.os.Bundle
;
import
android.view.LayoutInflater
;
import
android.view.View
;
...
...
@@ -9,29 +8,19 @@ import android.view.ViewGroup;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
androidx.fragment.app.FragmentManager
;
import
androidx.fragment.app.FragmentStatePagerAdapter
;
import
androidx.lifecycle.ViewModelProvider
;
import
androidx.viewpager.widget.ViewPager
;
import
net.lucode.hackware.magicindicator.ViewPagerHelper
;
import
net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator
;
import
net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter
;
import
net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerIndicator
;
import
net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerTitleView
;
import
java.util.List
;
import
javax.inject.Inject
;
import
cn.yunliyunwai.beyondclouds.BeyondApplication
;
import
cn.yunliyunwai.beyondclouds.R
;
import
cn.yunliyunwai.beyondclouds.adapter.CategoryFragmentAdapter
;
import
cn.yunliyunwai.beyondclouds.adapter.HomeNavigatorAdapter
;
import
cn.yunliyunwai.beyondclouds.base.BaseFragment
;
import
cn.yunliyunwai.beyondclouds.data.model.BlogCategory
;
import
cn.yunliyunwai.beyondclouds.databinding.FragmentCategoryBinding
;
import
cn.yunliyunwai.beyondclouds.databinding.FragmentHomeBinding
;
import
cn.yunliyunwai.beyondclouds.view.CommonPagerIndicator
;
import
cn.yunliyunwai.beyondclouds.view.ScaleTransitionPagerTitleView
;
import
cn.yunliyunwai.beyondclouds.viewmodel.HomeFragmentViewModel
;
public
class
HomeFragment
extends
BaseFragment
<
HomeFragmentViewModel
,
FragmentHomeBinding
>
{
...
...
@@ -74,75 +63,13 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo
}
static
class
HomeNavigatorAdapter
extends
CommonNavigatorAdapter
{
private
List
<
BlogCategory
>
categories
;
private
ViewPager
viewPager
;
public
HomeNavigatorAdapter
(
List
<
BlogCategory
>
categories
,
ViewPager
viewPager
)
{
this
.
categories
=
categories
;
this
.
viewPager
=
viewPager
;
}
@Override
public
int
getCount
()
{
return
categories
.
size
();
}
@Override
public
IPagerTitleView
getTitleView
(
Context
context
,
int
index
)
{
ScaleTransitionPagerTitleView
scaleTransitionPagerTitleView
=
ScaleTransitionPagerTitleView
.
createDefaultTitleView
(
context
);
scaleTransitionPagerTitleView
.
setText
(
categories
.
get
(
index
).
getCategory
());
scaleTransitionPagerTitleView
.
setOnClickListener
(
view
->
viewPager
.
setCurrentItem
(
index
));
return
scaleTransitionPagerTitleView
;
}
@Override
public
IPagerIndicator
getIndicator
(
Context
context
)
{
CommonPagerIndicator
indicator
=
new
CommonPagerIndicator
(
context
);
indicator
.
setIndicatorDrawable
(
context
.
getResources
().
getDrawable
(
R
.
drawable
.
tab_indicator
));
indicator
.
setMode
(
CommonPagerIndicator
.
MODE_EXACTLY
);
indicator
.
setDrawableHeight
(
8
);
indicator
.
setDrawableWidth
(
26
);
indicator
.
setYOffset
(
2
);
return
indicator
;
}
}
static
class
CategoryFragmentAdapter
extends
FragmentStatePagerAdapter
{
private
List
<
BlogCategory
>
categories
;
public
CategoryFragmentAdapter
(
@NonNull
FragmentManager
fm
,
List
<
BlogCategory
>
categories
)
{
super
(
fm
,
BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
);
this
.
categories
=
categories
;
}
@NonNull
@Override
public
Fragment
getItem
(
int
position
)
{
CategoryFragment
fragment
=
CategoryFragment
.
newInstance
();
Bundle
bundle
=
new
Bundle
();
bundle
.
putString
(
"text"
,
categories
.
get
(
position
).
getCategory
());
fragment
.
setArguments
(
bundle
);
return
fragment
;
}
@Override
public
int
getCount
()
{
return
categories
.
size
();
}
}
public
static
class
CategoryFragment
extends
Fragment
{
public
static
class
BlogListFragment
extends
Fragment
{
private
FragmentCategoryBinding
binding
;
private
String
text
;
static
Category
Fragment
newInstance
()
{
return
new
Category
Fragment
();
public
static
BlogList
Fragment
newInstance
()
{
return
new
BlogList
Fragment
();
}
@Override
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/view/ScaleTransitionPagerTitleView.java
View file @
0a5e364b
...
...
@@ -5,6 +5,7 @@ import android.graphics.Typeface;
import
net.lucode.hackware.magicindicator.buildins.commonnavigator.titles.ColorTransitionPagerTitleView
;
import
cn.yunliyunwai.beyondclouds.R
;
import
cn.yunliyunwai.beyondclouds.util.TypeFaces
;
...
...
@@ -17,7 +18,7 @@ public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView
@Override
public
void
onEnter
(
int
index
,
int
totalCount
,
float
enterPercent
,
boolean
leftToRight
)
{
super
.
onEnter
(
index
,
totalCount
,
enterPercent
,
leftToRight
);
// 实现颜色渐变
super
.
onEnter
(
index
,
totalCount
,
enterPercent
,
leftToRight
);
setScaleX
(
mMinScale
+
(
1.0f
-
mMinScale
)
*
enterPercent
);
setScaleY
(
mMinScale
+
(
1.0f
-
mMinScale
)
*
enterPercent
);
setTypeface
(
TypeFaces
.
SOURCE_HAN_SANS_CN
,
Typeface
.
BOLD
);
...
...
@@ -25,9 +26,10 @@ public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView
@Override
public
void
onLeave
(
int
index
,
int
totalCount
,
float
leavePercent
,
boolean
leftToRight
)
{
super
.
onLeave
(
index
,
totalCount
,
leavePercent
,
leftToRight
);
// 实现颜色渐变
super
.
onLeave
(
index
,
totalCount
,
leavePercent
,
leftToRight
);
setScaleX
(
1.0f
+
(
mMinScale
-
1.0f
)
*
leavePercent
);
setScaleY
(
1.0f
+
(
mMinScale
-
1.0f
)
*
leavePercent
);
setTypeface
(
TypeFaces
.
SOURCE_HAN_SANS_CN
);
}
public
float
getMinScale
()
{
...
...
@@ -39,12 +41,16 @@ public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView
}
public
static
ScaleTransitionPagerTitleView
createDefaultTitleView
(
Context
context
)
{
float
density
=
context
.
getResources
().
getDisplayMetrics
().
density
;
ScaleTransitionPagerTitleView
scaleTransitionPagerTitleView
=
new
ScaleTransitionPagerTitleView
(
context
);
scaleTransitionPagerTitleView
.
setTextSize
(
1
6
);
scaleTransitionPagerTitleView
.
setTextSize
(
1
8
);
scaleTransitionPagerTitleView
.
setTypeface
(
TypeFaces
.
SOURCE_HAN_SANS_CN
);
scaleTransitionPagerTitleView
.
setMinScale
(
0.85f
);
scaleTransitionPagerTitleView
.
setNormalColor
(
0xff999999
);
scaleTransitionPagerTitleView
.
setSelectedColor
(
0xff333333
);
scaleTransitionPagerTitleView
.
setMinScale
(
0.8f
);
int
paddingTop
=
scaleTransitionPagerTitleView
.
getPaddingTop
();
int
paddingBottom
=
scaleTransitionPagerTitleView
.
getPaddingTop
();
scaleTransitionPagerTitleView
.
setPadding
((
int
)
(
12
*
density
),
paddingTop
,
(
int
)
(
12
*
density
),
paddingBottom
);
scaleTransitionPagerTitleView
.
setNormalColor
(
context
.
getResources
().
getColor
(
R
.
color
.
colorText
));
scaleTransitionPagerTitleView
.
setSelectedColor
(
context
.
getResources
().
getColor
(
R
.
color
.
colorTextAccent
));
return
scaleTransitionPagerTitleView
;
}
}
\ No newline at end of file
app/src/main/java/cn/yunliyunwai/beyondclouds/view/SearchBar.java
0 → 100644
View file @
0a5e364b
package
cn
.
yunliyunwai
.
beyondclouds
.
view
;
import
android.content.Context
;
import
android.os.Build
;
import
android.util.AttributeSet
;
import
android.view.LayoutInflater
;
import
android.widget.FrameLayout
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.RequiresApi
;
import
cn.yunliyunwai.beyondclouds.R
;
public
class
SearchBar
extends
FrameLayout
{
public
SearchBar
(
@NonNull
Context
context
)
{
super
(
context
);
initView
(
context
);
}
public
SearchBar
(
@NonNull
Context
context
,
@Nullable
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
initView
(
context
);
}
public
SearchBar
(
@NonNull
Context
context
,
@Nullable
AttributeSet
attrs
,
int
defStyleAttr
)
{
super
(
context
,
attrs
,
defStyleAttr
);
initView
(
context
);
}
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
LOLLIPOP
)
public
SearchBar
(
@NonNull
Context
context
,
@Nullable
AttributeSet
attrs
,
int
defStyleAttr
,
int
defStyleRes
)
{
super
(
context
,
attrs
,
defStyleAttr
,
defStyleRes
);
initView
(
context
);
}
public
void
initView
(
Context
context
)
{
LayoutInflater
.
from
(
context
).
inflate
(
R
.
layout
.
beyond_search_bar
,
this
);
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/HomeFragmentViewModel.java
View file @
0a5e364b
...
...
@@ -40,12 +40,7 @@ public class HomeFragmentViewModel extends ViewModel {
blogRepository
.
getCategories
().
observeForever
(
response
->
{
if
(
response
.
getCode
()
==
0
)
{
homeCategories
.
setValue
(
response
.
getData
());
appExecutors
.
diskIO
().
execute
(
new
Runnable
()
{
@Override
public
void
run
()
{
blogRepository
.
saveCategories
(
response
.
getData
());
}
});
appExecutors
.
diskIO
().
execute
(()
->
blogRepository
.
saveCategories
(
response
.
getData
()));
}
});
}
...
...
app/src/main/res/layout/beyond_search_bar.xml
0 → 100644
View file @
0a5e364b
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"40dp"
android:background=
"@color/colorWhite"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
>
<View
android:id=
"@+id/search_bar_to_border"
android:layout_width=
"0dp"
android:layout_height=
"1dp"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
android:layout_marginStart=
"12dp"
android:layout_marginLeft=
"12dp"
android:layout_marginEnd=
"12dp"
android:layout_marginRight=
"12dp"
android:background=
"#efefef"
/>
<ImageView
android:id=
"@+id/search_icon_search"
app:layout_constraintTop_toTopOf=
"@id/search_bar_to_border"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
android:src=
"@color/colorPrimary"
android:layout_marginStart=
"20dp"
android:layout_marginLeft=
"20dp"
android:layout_width=
"16dp"
android:layout_height=
"16dp"
/>
<EditText
android:id=
"@+id/search_bar_edit_text"
android:paddingLeft=
"10dp"
android:background=
"@null"
android:hint=
"搜索话题/用户"
android:textSize=
"12sp"
android:textColor=
"#aaaaaa"
app:layout_constraintTop_toBottomOf=
"@id/search_bar_to_border"
app:layout_constraintStart_toEndOf=
"@id/search_icon_search"
app:layout_constraintEnd_toStartOf=
"@id/search_icon_add"
android:layout_width=
"0dp"
android:layout_height=
"39dp"
/>
<ImageView
android:id=
"@+id/search_icon_add"
app:layout_constraintTop_toTopOf=
"@id/search_bar_to_border"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
android:src=
"@color/colorPrimary"
android:layout_marginEnd=
"14dp"
android:layout_marginRight=
"14dp"
android:layout_width=
"16dp"
android:layout_height=
"16dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_home.xml
View file @
0a5e364b
...
...
@@ -19,15 +19,21 @@
app:layout_constraintEnd_toEndOf=
"parent"
android:layout_width=
"match_parent"
android:layout_height=
"50dp"
/>
<cn.yunliyunwai.beyondclouds.view.SearchBar
android:id=
"@+id/search_bar"
app:layout_constraintTop_toBottomOf=
"@id/magic_indicator"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
<androidx.viewpager.widget.ViewPager
android:id=
"@+id/view_pager"
app:layout_constraintTop_toBottomOf=
"@id/
magic_indicato
r"
app:layout_constraintTop_toBottomOf=
"@id/
search_ba
r"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
app/src/main/res/values/colors.xml
View file @
0a5e364b
...
...
@@ -6,4 +6,6 @@
<color
name=
"colorBackground"
>
#EDF5F8
</color>
<color
name=
"colorWhite"
>
#FFFFFF
</color>
<color
name=
"colorStatusBar"
>
#ffffff
</color>
<color
name=
"colorText"
>
#999999
</color>
<color
name=
"colorTextAccent"
>
#333333
</color>
</resources>
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