Android 悬浮窗,做一个篮球记分牌,两个队伍名可编辑,两个TextView分别显示两个队的比分,三个按钮分别可以加1、2、3分,一个按钮撤回上一步加分,一个按钮重置两队的分数。
时间: 2024-04-18 22:32:30 浏览: 118
好的,对于您的需求,您可以按照以下步骤实现一个篮球记分牌的悬浮窗:
1. 创建一个Service类,用于显示悬浮窗。在该类中,您可以使用WindowManager类来添加悬浮窗,并设置悬浮窗的布局:
```java
public class FloatingService extends Service {
private WindowManager windowManager;
private View floatView;
private TextView team1TextView, team2TextView;
private Button addOneButton, addTwoButton, addThreeButton, undoButton, resetButton;
private int team1Score = 0, team2Score = 0;
@Override
public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = LayoutInflater.from(this);
floatView = inflater.inflate(R.layout.floating_layout, null);
// 设置悬浮窗的位置等属性
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.START | Gravity.TOP;
params.x = 0;
params.y = 0;
// 添加悬浮窗
windowManager.addView(floatView, params);
// 初始化控件
team1TextView = floatView.findViewById(R.id.team1_text);
team2TextView = floatView.findViewById(R.id.team2_text);
addOneButton = floatView.findViewById(R.id.add_one_button);
addTwoButton = floatView.findViewById(R.id.add_two_button);
addThreeButton = floatView.findViewById(R.id.add_three_button);
undoButton = floatView.findViewById(R.id.undo_button);
resetButton = floatView.findViewById(R.id.reset_button);
// 设置初始分数和点击事件
updateScores();
addOneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addScore(1);
}
});
addTwoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addScore(2);
}
});
addThreeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addScore(3);
}
});
undoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
undoLastScore();
}
});
resetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resetScores();
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
if (floatView != null) {
windowManager.removeView(floatView);
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void updateScores() {
team1TextView.setText(String.valueOf(team1Score));
team2TextView.setText(String.valueOf(team2Score));
}
private void addScore(int score) {
team1Score += score;
updateScores();
}
private void undoLastScore() {
// 撤回上一步加分
// 注意需要处理减分后的负分情况
if (team1Score > 0) {
team1Score--;
}
updateScores();
}
private void resetScores() {
team1Score = 0;
team2Score = 0;
updateScores();
}
}
```
2. 在res目录下创建一个floating_layout.xml文件,用于定义悬浮窗的布局。您可以在该布局中添加两个TextView来显示队伍名和比分,以及五个Button来实现加分、撤回和重置操作:
```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/team1_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="队伍1" />
<EditText
android:id="@+id/team2_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="队伍2" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/add_one_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+1" />
<Button
android:id="@+id/add_two_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+2" />
<Button
android:id="@+id/add_three_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+3" />
<Button
android:id="@+id/undo_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="撤回" />
<Button
android:id="@+id/reset_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重置" />
</LinearLayout>
</LinearLayout>
```
3. 在AndroidManifest.xml文件中添加悬浮窗权限和声明FloatingService:
```xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application
...
<service
android:name=".FloatingService"
android:enabled="true"
android:exported="true" />
...
</application>
```
这样,您就可以通过悬浮窗来实现篮球记分牌的功能了。在悬浮窗中,您可以编辑队伍名,点击按钮来加分、撤回和重置比分。
希望以上内容对您有所帮助!如果您有任何疑问,请随时提问。
阅读全文