Skip to content

Commit d372538

Browse files
committed
Circle Video Guide Block Implemetation with Close Button
1 parent e57acc9 commit d372538

File tree

4 files changed

+156
-0
lines changed

4 files changed

+156
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.contextu.al.circlevideo
2+
3+
import android.app.Activity
4+
import android.app.Dialog
5+
import android.content.Context
6+
import android.graphics.Color
7+
import android.graphics.drawable.ColorDrawable
8+
import android.os.Bundle
9+
import android.util.DisplayMetrics
10+
import android.view.Window
11+
import android.view.WindowManager
12+
import com.contextu.al.R
13+
import com.google.android.material.floatingactionbutton.FloatingActionButton
14+
15+
class CircleVideoGuideBlock(private val activity: Activity): Dialog(activity) {
16+
init {
17+
requestWindowFeature(Window.FEATURE_NO_TITLE)
18+
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
19+
window?.setDimAmount(0f)
20+
}
21+
override fun onCreate(savedInstanceState: Bundle?) {
22+
super.onCreate(savedInstanceState)
23+
24+
}
25+
26+
fun show(url: String){
27+
setContentView(R.layout.circle_video)
28+
val container:CircularWebViewContainer = findViewById(R.id.container)
29+
val webView:CircularWebView = findViewById(R.id.webView)
30+
val btnClose:FloatingActionButton = findViewById(R.id.btnClose)
31+
//create code to support video inside web-view
32+
val webSettings = webView.settings
33+
webSettings.javaScriptEnabled = true
34+
webSettings.loadWithOverviewMode = true
35+
webSettings.useWideViewPort = true
36+
webSettings.domStorageEnabled = true
37+
webSettings.setSupportZoom(false)
38+
webSettings.builtInZoomControls = true
39+
webSettings.displayZoomControls = false
40+
41+
val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
42+
val displayMetrics = DisplayMetrics()
43+
windowManager.defaultDisplay.getMetrics(displayMetrics)
44+
val width = displayMetrics.widthPixels * 0.90
45+
46+
container.layoutParams.width = width.toInt()
47+
container.layoutParams.height = width.toInt()
48+
49+
webView.loadUrl(url)
50+
btnClose.setOnClickListener {
51+
dismiss()
52+
}
53+
show()
54+
}
55+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.contextu.al.circlevideo
2+
import android.content.Context
3+
import android.graphics.Canvas
4+
import android.graphics.Path
5+
import android.util.AttributeSet
6+
import android.webkit.WebView
7+
import android.widget.FrameLayout
8+
class CircularWebViewContainer : FrameLayout {
9+
private val clipPath = Path()
10+
11+
constructor(context: Context) : super(context) {
12+
init()
13+
}
14+
15+
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
16+
init()
17+
}
18+
19+
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(
20+
context,
21+
attrs,
22+
defStyleAttr
23+
) {
24+
init()
25+
}
26+
27+
private fun init() {
28+
// Enable hardware acceleration to improve performance
29+
setLayerType(LAYER_TYPE_HARDWARE, null)
30+
}
31+
32+
override fun dispatchDraw(canvas: Canvas) {
33+
val save = canvas.save()
34+
canvas.clipPath(clipPath)
35+
super.dispatchDraw(canvas)
36+
canvas.restoreToCount(save)
37+
}
38+
39+
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
40+
super.onSizeChanged(w, h, oldw, oldh)
41+
updateClipPath()
42+
}
43+
44+
private fun updateClipPath() {
45+
val radius = Math.min(width, height) / 2f
46+
val centerX = width / 2f
47+
val centerY = height / 2f
48+
clipPath.reset()
49+
clipPath.addCircle(centerX, centerY, radius, Path.Direction.CW)
50+
clipPath.close()
51+
}
52+
}
53+
54+
class CircularWebView : WebView {
55+
constructor(context: Context) : super(context)
56+
57+
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
58+
59+
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(
60+
context,
61+
attrs,
62+
defStyleAttr
63+
)
64+
65+
override fun onDraw(canvas: Canvas) {
66+
super.onDraw(canvas)
67+
}
68+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<vector android:height="24dp" android:tint="#000000"
2+
android:viewportHeight="24" android:viewportWidth="24"
3+
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
4+
<path android:fillColor="@android:color/white" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
5+
</vector>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<com.contextu.al.circlevideo.CircularWebViewContainer
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
xmlns:app="http://schemas.android.com/apk/res-auto"
5+
android:id="@+id/container"
6+
android:layout_width="400dp"
7+
android:layout_height="400dp"
8+
android:layout_gravity="center">
9+
10+
<com.contextu.al.circlevideo.CircularWebView
11+
android:id="@+id/webView"
12+
android:layout_width="match_parent"
13+
android:layout_height="match_parent"
14+
android:layout_gravity="center">
15+
16+
</com.contextu.al.circlevideo.CircularWebView>
17+
<!-- Close Button -->
18+
<com.google.android.material.floatingactionbutton.FloatingActionButton
19+
android:id="@+id/btnClose"
20+
android:layout_width="wrap_content"
21+
android:layout_height="wrap_content"
22+
android:src="@drawable/ic_close"
23+
app:fabSize="mini"
24+
app:backgroundTint="@color/white"
25+
android:layout_margin="10dp"
26+
android:layout_gravity="bottom|center"/>
27+
28+
</com.contextu.al.circlevideo.CircularWebViewContainer>

0 commit comments

Comments
 (0)