/
ViewPartFullScreenActivity.kt
177 lines (159 loc) · 6.8 KB
/
ViewPartFullScreenActivity.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
package github.cccxm.mydemo.android.adapter.screen
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
import android.view.*
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.ScrollView
import com.mapbox.mapboxsdk.MapboxAccountManager
import com.mapbox.mapboxsdk.maps.MapView
import github.cccxm.mydemo.R
import github.cccxm.mydemo.utils.color
import github.cccxm.mydemo.utils.string
import org.jetbrains.anko.*
import org.jetbrains.anko.appcompat.v7.toolbar
import org.jetbrains.anko.design.appBarLayout
/**
* Created by cxm
* on 2017/3/31.
*/
@SuppressLint("NewApi")
class ViewPartFullScreenActivity : AppCompatActivity() {
private val ui = UI()
private lateinit var mFragment: ViewPartFullScreenFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MapboxAccountManager.start(this, string(R.string.mapbox_token))
setContentView(ui.setContentView(this))
mFragment = (supportFragmentManager.findFragmentById(UI.ID_FRAME_LAYOUT) ?: ViewPartFullScreenFragment()) as ViewPartFullScreenFragment
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(UI.ID_FRAME_LAYOUT, mFragment)
transaction.commit()
val mToolBar = ui.mToolBar
setSupportActionBar(mToolBar)
val appBar = supportActionBar ?: return
appBar.setDisplayHomeAsUpEnabled(true)
mToolBar.setNavigationOnClickListener { onBackPressed() }
}
override fun onStart() {
super.onStart()
mFragment.mRelativeLayout.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
val screenHeight = displayMetrics.heightPixels
val locations = IntArray(2)
mFragment.mRelativeLayout.getLocationOnScreen(locations)
val height = screenHeight - locations[1]
val params = LinearLayout.LayoutParams(matchParent, height)
mFragment.mRelativeLayout.layoutParams = params
mFragment.mRelativeLayout.viewTreeObserver.removeOnPreDrawListener(this) //如果不移除此监听,在滑动过程中将会持续回调
return true
}
})
}
class UI : AnkoComponent<ViewPartFullScreenActivity> {
companion object {
@JvmStatic val ID_FRAME_LAYOUT = 0x001
}
lateinit var mToolBar: Toolbar
override fun createView(ui: AnkoContext<ViewPartFullScreenActivity>): View = with(ui) {
linearLayout {
orientation = LinearLayout.VERTICAL
appBarLayout(R.style.AppTheme_AppBarOverlay) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
elevation = px2dip(5)
toolbar(R.style.AppTheme_PopupOverlay) {
mToolBar = this
backgroundColor = color("#75CFF1")
}.lparams(matchParent, dimen(R.dimen.tool_bar_height))
}.lparams(matchParent, wrapContent)
frameLayout { id = ID_FRAME_LAYOUT }.lparams(matchParent, matchParent)
}
}
}
}
class ViewPartFullScreenFragment : Fragment() {
private lateinit var mMapView: MapView
lateinit var mRelativeLayout: View
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
return with(context) {
scrollView {
backgroundColor = Color.BLACK
linearLayout {
orientation = LinearLayout.VERTICAL
linearLayout {
orientation = LinearLayout.VERTICAL
mRelativeLayout = this
addView(with(InterceptLayout(context, this@scrollView)) {
addView(with(MapView(context)) {
//地图
mMapView = this
this
}.lparams(matchParent, matchParent))
this
}.lparams(matchParent, 0) { weight = 1f })
linearLayout {
orientation = LinearLayout.VERTICAL
backgroundResource = R.drawable.shape_gradient_blue_to_black
textView("显示在屏幕上的文字") {
//显示的文字
gravity = Gravity.CENTER
textColor = Color.WHITE
textSize = px2sp(32)
backgroundResource = R.drawable.shape_radius_black_gray
}.lparams(matchParent, matchParent) {
margin = dip(8)
}
}.lparams(matchParent, dip(200))
}.lparams(matchParent, wrapContent)
textView("被隐藏在下方的文字") {
//隐藏的文字
gravity = Gravity.CENTER
textColor = Color.WHITE
textSize = px2sp(32)
backgroundResource = R.drawable.shape_radius_black_gray
}.lparams(matchParent, dip(400)) {
margin = dip(8)
}
}.lparams(matchParent, wrapContent)
}
}
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
mMapView.onCreate(savedInstanceState)
}
override fun onResume() {
super.onResume()
mMapView.onResume()
}
override fun onPause() {
super.onPause()
mMapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
mMapView.onSaveInstanceState(outState)
}
override fun onLowMemory() {
super.onLowMemory()
mMapView.onLowMemory()
}
override fun onDestroy() {
super.onDestroy()
mMapView.onDestroy()
}
}
@SuppressLint("ViewConstructor")
private class InterceptLayout(context: Context, private val scrollView: ScrollView) : RelativeLayout(context) {
override fun onTouchEvent(event: MotionEvent) = true
override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
scrollView.requestDisallowInterceptTouchEvent(ev.action != MotionEvent.ACTION_UP)
return false
}
}