Added Material Design ShapeableImageView for Circular ImageView

This commit is contained in:
h4h13 2020-02-24 11:12:09 +05:30
parent 6f7054c141
commit 437f73b1dc
14 changed files with 116 additions and 33 deletions

View file

@ -143,7 +143,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
}); });
if (savedInstanceState == null) { if (savedInstanceState == null) {
setMusicChooser(PreferenceUtil.getInstance(this).getLastMusicChooser()); selectedFragment(PreferenceUtil.getInstance(this).getLastPage());
} else { } else {
restoreCurrentFragment(); restoreCurrentFragment();
} }

View file

@ -0,0 +1,39 @@
/*
* Copyright (c) 2020 Hemanth Savarala.
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by
* the Free Software Foundation either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*/
package code.name.monkey.retromusic.views
import android.content.Context
import android.util.AttributeSet
import code.name.monkey.retromusic.R
import com.google.android.material.imageview.ExperimentalImageView
import com.google.android.material.imageview.ShapeableImageView
import com.google.android.material.shape.CornerFamily
import com.google.android.material.shape.ShapeAppearanceModel
@ExperimentalImageView
class RetroShapeableImageView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = -1
) : ShapeableImageView(context, attrs, defStyle) {
init {
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.RetroShapeableImageView, defStyle, -1)
val cornerSize = typedArray.getDimension(R.styleable.RetroShapeableImageView_retroCornerSize, 0f);
shapeAppearanceModel = ShapeAppearanceModel.Builder()
.setAllCorners(CornerFamily.ROUNDED, cornerSize)
.build()
typedArray.recycle()
}
}

View file

@ -12,14 +12,14 @@
~ See the GNU General Public License for more details. ~ See the GNU General Public License for more details.
--> -->
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.core.widget.NestedScrollView android:id="@+id/container"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginStart="@dimen/toolbar_margin_horizontal"
android:layout_marginEnd="@dimen/toolbar_margin_horizontal" android:layout_marginEnd="@dimen/toolbar_margin_horizontal"
android:layout_marginStart="@dimen/toolbar_margin_horizontal"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<LinearLayout <LinearLayout
@ -55,15 +55,16 @@
android:background="@drawable/shadow_up" android:background="@drawable/shadow_up"
app:layout_constraintBottom_toBottomOf="parent" /> app:layout_constraintBottom_toBottomOf="parent" />
<code.name.monkey.retromusic.views.CircularImageView <code.name.monkey.retromusic.views.RetroShapeableImageView
android:id="@+id/userImage" android:id="@+id/userImage"
android:layout_width="42dp" android:layout_width="42dp"
android:layout_height="42dp" android:layout_height="42dp"
android:layout_marginStart="16dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginStart="16dp"
app:civ_border="false" app:civ_border="false"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:retroCornerSize="21dp"
tools:srcCompat="@tools:sample/avatars" /> tools:srcCompat="@tools:sample/avatars" />
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView

View file

@ -12,30 +12,31 @@
~ See the GNU General Public License for more details. ~ See the GNU General Public License for more details.
--> -->
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.core.widget.NestedScrollView android:id="@+id/container"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginStart="@dimen/toolbar_margin_horizontal"
android:layout_marginEnd="@dimen/toolbar_margin_horizontal" android:layout_marginEnd="@dimen/toolbar_margin_horizontal"
android:layout_marginStart="@dimen/toolbar_margin_horizontal"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<code.name.monkey.retromusic.views.CircularImageView <code.name.monkey.retromusic.views.RetroShapeableImageView
android:id="@+id/userImage" android:id="@+id/userImage"
android:layout_width="42dp" android:layout_width="42dp"
android:layout_height="42dp" android:layout_height="42dp"
android:layout_marginBottom="8dp"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
app:civ_border="false" app:civ_border="false"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:retroCornerSize="21dp"
tools:srcCompat="@tools:sample/avatars" /> tools:srcCompat="@tools:sample/avatars" />
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView

View file

@ -12,11 +12,12 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<code.name.monkey.retromusic.views.CircularImageView <code.name.monkey.retromusic.views.RetroShapeableImageView
android:id="@+id/image" android:id="@+id/image"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:civ_border="false" app:civ_border="false"
app:retroCornerSize="78dp"
tools:src="@tools:sample/avatars" /> tools:src="@tools:sample/avatars" />
</code.name.monkey.retromusic.views.WidthFitSquareLayout> </code.name.monkey.retromusic.views.WidthFitSquareLayout>

View file

@ -11,10 +11,10 @@
~ without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ~ without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
~ See the GNU General Public License for more details. ~ See the GNU General Public License for more details.
--> -->
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.core.widget.NestedScrollView android:id="@+id/container"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
@ -55,15 +55,16 @@
android:background="@drawable/shadow_up" android:background="@drawable/shadow_up"
app:layout_constraintBottom_toBottomOf="parent" /> app:layout_constraintBottom_toBottomOf="parent" />
<code.name.monkey.retromusic.views.CircularImageView <code.name.monkey.retromusic.views.RetroShapeableImageView
android:id="@+id/userImage" android:id="@+id/userImage"
android:layout_width="42dp" android:layout_width="42dp"
android:layout_height="42dp" android:layout_height="42dp"
android:layout_marginStart="16dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginStart="16dp"
app:civ_border="false" app:civ_border="false"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:retroCornerSize="21dp"
tools:srcCompat="@tools:sample/avatars" /> tools:srcCompat="@tools:sample/avatars" />
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView

View file

@ -23,7 +23,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<code.name.monkey.retromusic.views.CircularImageView <code.name.monkey.retromusic.views.RetroShapeableImageView
app:retroCornerSize="21dp"
android:id="@+id/userImage" android:id="@+id/userImage"
android:layout_width="42dp" android:layout_width="42dp"
android:layout_height="42dp" android:layout_height="42dp"

View file

@ -6,5 +6,6 @@
<androidx.viewpager.widget.ViewPager <androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager" android:id="@+id/viewPager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent"
android:overScrollMode="never" />
</FrameLayout> </FrameLayout>

View file

@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="106dp" android:layout_width="112dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="8dp" android:layout_margin="8dp"
android:background="?attr/rectSelector" android:background="?attr/rectSelector"
@ -12,12 +12,13 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<code.name.monkey.retromusic.views.CircularImageView <code.name.monkey.retromusic.views.RetroShapeableImageView
android:id="@+id/image" android:id="@+id/image"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@android:color/transparent" android:background="@android:color/transparent"
app:civ_border="false" app:civ_border="false"
app:retroCornerSize="56dp"
tools:src="@tools:sample/avatars" /> tools:src="@tools:sample/avatars" />
</code.name.monkey.retromusic.views.WidthFitSquareLayout> </code.name.monkey.retromusic.views.WidthFitSquareLayout>

View file

@ -25,24 +25,25 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@drawable/artist_card_gradient_effect"> android:background="@drawable/artist_card_gradient_effect">
<code.name.monkey.retromusic.views.CircularImageView <code.name.monkey.retromusic.views.RetroShapeableImageView
android:id="@+id/image" android:id="@+id/image"
android:layout_width="40dp" android:layout_width="42dp"
android:layout_height="40dp" android:layout_height="42dp"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
app:civ_border_width="0dp" app:civ_border_width="0dp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:retroCornerSize="21dp"
tools:src="@tools:sample/avatars" /> tools:src="@tools:sample/avatars" />
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/title" android:id="@+id/title"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="8dp"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="2" android:maxLines="2"
android:textStyle="bold" android:textStyle="bold"

View file

@ -21,19 +21,20 @@
android:gravity="center_vertical" android:gravity="center_vertical"
android:minHeight="64dp" android:minHeight="64dp"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="12dp"
android:paddingEnd="12dp" android:paddingEnd="12dp"
android:paddingStart="12dp"
tools:ignore="PrivateResource"> tools:ignore="PrivateResource">
<code.name.monkey.retromusic.views.CircularImageView <code.name.monkey.retromusic.views.RetroShapeableImageView
android:id="@+id/icon" android:id="@+id/icon"
android:layout_width="40dp" android:layout_width="42dp"
android:layout_height="40dp" android:layout_height="42dp"
app:civ_border="false" app:civ_border="false"
app:civ_shadow="false" app:civ_shadow="false"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:retroCornerSize="21dp"
app:srcCompat="@drawable/ic_person_flat" app:srcCompat="@drawable/ic_person_flat"
tools:srcCompat="@tools:sample/backgrounds/scenic[20]" /> tools:srcCompat="@tools:sample/backgrounds/scenic[20]" />

View file

@ -23,13 +23,14 @@
android:paddingBottom="24dp" android:paddingBottom="24dp"
tools:ignore="PrivateResource"> tools:ignore="PrivateResource">
<code.name.monkey.retromusic.views.CircularImageView <code.name.monkey.retromusic.views.RetroShapeableImageView
android:id="@+id/icon" android:id="@+id/icon"
android:layout_width="72dp" android:layout_width="72dp"
android:layout_height="72dp" android:layout_height="72dp"
android:layout_margin="8dp" android:layout_margin="8dp"
app:civ_border="false" app:civ_border="false"
app:civ_shadow="false" app:civ_shadow="false"
app:retroCornerSize="36dp"
app:srcCompat="@drawable/ic_person_flat" app:srcCompat="@drawable/ic_person_flat"
tools:srcCompat="@tools:sample/backgrounds/scenic[20]" /> tools:srcCompat="@tools:sample/backgrounds/scenic[20]" />
@ -38,10 +39,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:orientation="vertical" android:orientation="vertical"
android:paddingStart="16dp" android:paddingBottom="8dp"
android:paddingTop="8dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:paddingBottom="8dp"> android:paddingStart="16dp"
android:paddingTop="8dp">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/title" android:id="@+id/title"

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Hemanth Savarala.
~
~ Licensed under the GNU General Public License v3
~
~ This is free software: you can redistribute it and/or modify it under
~ the terms of the GNU General Public License as published by
~ the Free Software Foundation either version 3 of the License, or (at your option) any later version.
~
~ This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
~ without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
~ See the GNU General Public License for more details.
-->
<resources>
<declare-styleable name="RetroShapeableImageView">
<attr name="retroCornerSize" format="dimension" />
</declare-styleable>
</resources>

View file

@ -183,4 +183,19 @@
<item name="android:windowBackground">@drawable/splash</item> <item name="android:windowBackground">@drawable/splash</item>
<item name="android:statusBarColor">@android:color/transparent</item> <item name="android:statusBarColor">@android:color/transparent</item>
</style> </style>
<style name="CircularShapeAppearance" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">22dp</item>
</style>
<style name="BigCircularShapeAppearance" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">56dp</item>
</style>
<style name="ExtraBigCircularShapeAppearance" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">78dp</item>
</style>
</resources> </resources>