这应该是一个非常简单的有趣游戏,您可以选择2种颜色,而您的朋友必须猜测您选择了哪种颜色。我基本上希望我的活动看起来像这样:
每个季度都应该可以通过onClick-Animation进行点击(如果看起来像这样,我想它就不能成为Button了]
使用XML代码获得此结果的最佳方法是什么?我当时在考虑使用ImageViews的ConstraintLayout,但是我得到的不是可点击的圆形,而是可点击区域的矩形。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/imgOne"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/colorPrimary"
app:layout_constraintBottom_toTopOf="@+id/imgThree"
app:layout_constraintEnd_toStartOf="@id/imgTwo"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="NEW ITEM"
android:textColor="@color/colorBlack"
app:layout_constraintBottom_toBottomOf="@id/imgOne"
app:layout_constraintEnd_toStartOf="@id/imgTwo"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/imgTwo"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/colorblue"
app:layout_constraintBottom_toTopOf="@+id/imgFour"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@id/imgOne"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="NEW ITEM"
android:textColor="@color/colorBlack"
app:layout_constraintBottom_toBottomOf="@id/imgTwo"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/imgTwo" />
<ImageView
android:id="@+id/imgThree"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/colorGreen"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/imgTwo"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imgOne" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="NEW ITEM"
android:textColor="@color/colorBlack"
app:layout_constraintBottom_toBottomOf="@id/imgThree"
app:layout_constraintEnd_toStartOf="@id/imgFour"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/imgFour"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@id/imgThree"
app:layout_constraintTop_toBottomOf="@+id/imgTwo" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="NEW ITEM"
android:textColor="@color/colorBlack"
app:layout_constraintBottom_toBottomOf="@id/imgThree"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/imgTwo" />
</androidx.constraintlayout.widget.ConstraintLayout>
这可以通过毕加索创建圆形图像来完成,但这感觉更像是一种解决方法,而不是解决方案。
这是诀窍,您可以只使用xml布局来创建它]]
首先在可绘制文件夹中创建4个矢量路径形状
ic_top_left.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="180dp" android:height="180dp" android:viewportWidth="250" android:viewportHeight="250"> <group> <clip-path android:pathData="M0,0h250v250h-250z"/> <path android:pathData="M240,240L15,240a226.612,226.612 0,0 1,4.571 -45.346A223.763,223.763 0,0 1,53.426 114.2a225.659,225.659 0,0 1,98.993 -81.518,223.933 223.933,0 0,1 42.235,-13.11A226.68,226.68 0,0 1,240 15L240,240Z" android:fillColor="#F8675D"/> </group> </vector>
ic_top_right.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="180dp" android:height="180dp" android:viewportWidth="250" android:viewportHeight="250"> <group> <clip-path android:pathData="M0,0h250v250h-250z"/> <path android:pathData="M10,15l-0,-0a226.76,226.76 135,0 1,45.344 4.572,223.929 223.929,0 0,1 42.235,13.11A225.077,225.077 0,0 1,135.8 53.427,226.632 226.632,135 0,1 169.1,80.9a226.592,226.592 135,0 1,27.474 33.3A224.976,224.976 135,0 1,217.318 152.421,223.788 223.788,45 0,1 230.428,194.655 226.613,226.613 0,0 1,235 240L10,240L10,15Z" android:fillColor="#5699ff"/> </group> </vector>
ic_bott_left.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="180dp" android:height="180dp" android:viewportWidth="250" android:viewportHeight="250"> <group> <clip-path android:pathData="M0,0h250v250h-250z"/> <path android:pathData="M240,235h0a226.76,226.76 0,0 1,-45.344 -4.572,223.929 223.929,0 0,1 -42.235,-13.11A225.077,225.077 0,0 1,114.2 196.573,226.632 226.632,0 0,1 80.9,169.1a226.592,226.592 0,0 1,-27.474 -33.3A224.976,224.976 0,0 1,32.682 97.579,223.788 223.788,0 0,1 19.572,55.345 226.613,226.613 0,0 1,15 10L240,10L240,235Z" android:fillColor="#8BC34A"/> </group> </vector>
ic_bott_right.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="180dp" android:height="180dp" android:viewportWidth="250" android:viewportHeight="250"> <group> <clip-path android:pathData="M0,0h250v250h-250z"/> <path android:pathData="M10,10L235,10a226.678,226.678 0,0 1,-4.571 45.346A223.763,223.763 0,0 1,196.574 135.8a225.654,225.654 0,0 1,-98.993 81.519,223.933 223.933,45 0,1 -42.235,13.11A226.676,226.676 0,0 1,10 235L10,10Z" android:fillColor="#FFC107"/> </group> </vector>
然后进去activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:text="DashBoard" android:layout_centerHorizontal="true" android:textSize="25sp" android:textStyle="bold" android:textColor="@android:color/background_dark"/> <RelativeLayout android:layout_centerInParent="true" android:layout_width="300dp" android:layout_height="300dp"> <!--Top_Left_Btn--> <LinearLayout android:onClick="OnClickAndroid" android:layout_width="150dp" android:layout_height="150dp" android:paddingStart="15dp" android:gravity="center" android:orientation="vertical" android:background="@drawable/ic_top_left"> <ImageView android:layout_width="32dp" android:layout_height="32dp" android:layout_marginTop="32dp" android:layout_marginBottom="10dp" android:src="@drawable/ic_android"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="18sp" android:text="Android" android:textStyle="bold"/> </LinearLayout> <!--Top_Right_Btn--> <LinearLayout android:onClick="OnClickRide" android:layout_width="150dp" android:layout_height="150dp" android:layout_alignParentEnd="true" android:paddingEnd="15dp" android:gravity="center" android:orientation="vertical" android:background="@drawable/ic_top_right"> <ImageView android:layout_width="32dp" android:layout_height="32dp" android:layout_marginTop="32dp" android:layout_marginBottom="10dp" android:src="@drawable/ic_ride"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@android:color/white" android:text="Ride" android:textStyle="bold"/> </LinearLayout> <!--Bottom_Left_Btn--> <LinearLayout android:onClick="OnClickBugs" android:layout_width="150dp" android:layout_height="150dp" android:layout_alignParentBottom="true" android:paddingStart="15dp" android:gravity="center" android:orientation="vertical" android:background="@drawable/ic_bott_left"> <ImageView android:layout_width="32dp" android:layout_height="32dp" android:src="@drawable/ic_bug"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:layout_marginTop="10dp" android:layout_marginBottom="32dp" android:textSize="18sp" android:text="Bugs" android:textStyle="bold"/> </LinearLayout> <!--Bottm_Right_Btn--> <LinearLayout android:onClick="OnClickFitness" android:layout_width="150dp" android:layout_height="150dp" android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" android:paddingEnd="15dp" android:gravity="center" android:orientation="vertical" android:background="@drawable/ic_bott_right"> <ImageView android:layout_width="32dp" android:layout_height="32dp" android:src="@drawable/ic_fitness"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:layout_marginTop="10dp" android:layout_marginBottom="32dp" android:textSize="18sp" android:text="Fitness" android:textStyle="bold"/> </LinearLayout> </RelativeLayout> </RelativeLayout>
&然后为按钮中的按钮创建onClick方法MainActivity.java
package com.softwindevs.circularpiebuttons; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void OnClickAndroid(View view) { Toast.makeText(this, "Android Button Clicked", Toast.LENGTH_SHORT).show(); } public void OnClickRide(View view) { Toast.makeText(this, "Ride Button Clicked", Toast.LENGTH_SHORT).show(); } public void OnClickBugs(View view) { Toast.makeText(this, "Bugs Button Clicked", Toast.LENGTH_SHORT).show(); } public void OnClickFitness(View view) { Toast.makeText(this, "Fitness Button Clicked", Toast.LENGTH_SHORT).show(); } }
&就是这样,这就是您执行此魔术的方法演示:
对于所有资产和完整的项目代码签出Github仓库:Click Here
好运:)