Android拼图游戏开发全纪录1

简介: 今天我们继续来讲解Android拼图游戏全纪录的第二篇,今天要完成的任务比较简单:界面布局和资源文件 1资源文件: 我们在开发一个项目的时候,首先要定下这个App的基调,是小清新呢还是重口味,所以我们需要定义一些颜色、style等 首先...

今天我们继续来讲解Android拼图游戏全纪录的第二篇,今天要完成的任务比较简单:界面布局和资源文件


1资源文件:

我们在开发一个项目的时候,首先要定下这个App的基调,是小清新呢还是重口味,所以我们需要定义一些颜色、style等

首先是颜色等:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="app_bg">#000000</color>
    
    <color name="title_text">#FFFFFF</color>
    
    <color name="record_title_bg">#F56A47</color>
    <color name="record_title_text">#FFFFFF</color>
    <color name="record_title_text_dark">#727272</color>
    
    <color name="main_bg">#3EC5FF</color>
    <color name="main_text">#FFFFFF</color>
    
    <color name="setting_reg_bg">#A2A2A2</color>
    <color name="setting_text_light">#C3C3C3</color>
    <color name="setting_text_dark">#111111</color>
    
    <color name="tv_click">#33444444</color>
</resources>

以上就定义好了我们这个App的小清新的风格

然后是字符串资源,这个随意吧

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">XPuzzle</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="puzzle_main_type">选择难度:</string>
    <string name="puzzle_main_steps">步数:</string>
    <string name="puzzle_main_img">原        图</string>
    <string name="puzzle_main_reset">重        置</string>
    <string name="puzzle_main_back">返        回</string>
    <string name="puzzle_main_time">时间:</string>
    <string name="puzzle_main_type_selected">2 X 2</string>
    <string name="puzzle_main_record">查看记录</string>
    <string name="puzzle_main_more">了解更多</string>

</resources>

接下来是自定义的一个带Selector的Shape,这样Button使用这个背景后,就比较配合小清新的风格了

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"><shape android:shape="rectangle">

            <!-- 填充的颜色 -->
            <solid android:color="#33444444" />
            <!-- 设置按钮的四个角为弧形 -->
            <!-- android:radius 弧形的半径 -->
            <corners android:radius="5dip" />

            <!-- padding:Button里面的文字与Button边界的间隔 -->
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape></item>
    <item><shape android:shape="rectangle">

            <!-- 填充的颜色 -->
            <solid android:color="@color/title_text" />
            <!-- 设置按钮的四个角为弧形 -->
            <!-- android:radius 弧形的半径 -->
            <corners android:radius="5dip" />

            <!-- padding:Button里面的文字与Button边界的间隔 -->
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape></item>

</selector>

这个就是我们在前面图中看见的Button了,是不是很好看啊

嗯 还有个TextView的selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/tv_click" android:state_pressed="true"></item>
    <item android:drawable="@android:color/transparent"></item>

</selector>

下面我们就要开始实现我们的界面了:

首先是首页界面:


布局比较简单,相信大家都看得懂

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/main_bg" >

    <LinearLayout
        android:id="@+id/ll_puzzle_main_spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_margin="10dip" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/puzzle_main_type"
            android:textColor="@color/main_text"
            android:textSize="@dimen/text_title" />

        <TextView
            android:id="@+id/tv_puzzle_main_type_selected"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/textview_click"
            android:text="@string/puzzle_main_type_selected"
            android:textColor="@color/main_text"
            android:textSize="@dimen/text_title" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_xpuzzle_main_functions"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/gv_xpuzzle_main_pic_list"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:layout_alignRight="@+id/gv_xpuzzle_main_pic_list"
        android:layout_margin="@dimen/padding" >

        <Button
            android:id="@+id/btn_puzzle_main_record"
            style="@style/btn_style"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/padding"
            android:background="@drawable/white_button"
            android:text="@string/puzzle_main_record" />

        <Button
            android:id="@+id/btn_puzzle_main_setting"
            style="@style/btn_style"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/padding"
            android:background="@drawable/white_button"
            android:text="@string/puzzle_main_more" />
    </LinearLayout>

    <GridView
        android:id="@+id/gv_xpuzzle_main_pic_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/ll_xpuzzle_main_functions"
        android:layout_below="@id/ll_puzzle_main_spinner"
        android:layout_centerHorizontal="true"
        android:layout_margin="@dimen/padding"
        android:gravity="center_horizontal"
        android:horizontalSpacing="@dimen/padding"
        android:numColumns="4"
        android:padding="@dimen/padding"
        android:verticalSpacing="@dimen/padding" >
    </GridView>

</RelativeLayout>

这就OK了。

里面的选择难度是一个popupwindow,所以还有个布局文件

这个。。so easy了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/tv_main_type_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="8dp"
        android:text="2x2"
        android:textColor="@color/main_text"
        android:textSize="@dimen/text_title_sub" />

    <TextView
        android:id="@+id/tv_main_type_3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="8dp"
        android:text="3x3"
        android:textColor="@color/main_text"
        android:textSize="@dimen/text_title_sub" />

    <TextView
        android:id="@+id/tv_main_type_4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="4x4"
        android:textColor="@color/main_text"
        android:textSize="@dimen/text_title_sub" />

</LinearLayout>

最后是拼图的布局界面:如下图


就是这样啦,其实界面也很简单

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl_puzzle_main_main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/main_bg" >

    <LinearLayout
        android:id="@+id/ll_puzzle_main_spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/padding"
        android:gravity="center_horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/puzzle_main_steps"
            android:textColor="@color/title_text"
            android:textSize="@dimen/text_title" />

        <TextView
            android:id="@+id/tv_puzzle_main_counts"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:paddingRight="50dip"
            android:text="1"
            android:textColor="@color/title_text"
            android:textSize="@dimen/text_title" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/puzzle_main_time"
            android:textColor="@color/title_text"
            android:textSize="@dimen/text_title" />

        <TextView
            android:id="@+id/tv_puzzle_main_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="1"
            android:textColor="@color/title_text"
            android:textSize="@dimen/text_title" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_puzzle_main_btns"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_margin="@dimen/padding" >

        <Button
            android:id="@+id/btn_puzzle_main_img"
            style="@style/btn_style"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/padding"
            android:background="@drawable/white_button"
            android:text="@string/puzzle_main_img" />

        <Button
            android:id="@+id/btn_puzzle_main_restart"
            style="@style/btn_style"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/padding"
            android:background="@drawable/white_button"
            android:text="@string/puzzle_main_reset" />

        <Button
            android:id="@+id/btn_puzzle_main_back"
            style="@style/btn_style"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/padding"
            android:background="@drawable/white_button"
            android:text="@string/puzzle_main_back" />
    </LinearLayout>

    <GridView
        android:id="@+id/gv_puzzle_main_detail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/ll_puzzle_main_btns"
        android:layout_below="@id/ll_puzzle_main_spinner"
        android:layout_centerInParent="true"
        android:layout_margin="@dimen/padding" >
    </GridView>

</RelativeLayout>

好了,今天的东西都是些准备工作,所以比较简单。
目录
相关文章
|
7天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
12 1
|
9天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
32 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
10天前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
39 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
1天前
|
机器学习/深度学习 安全 数据处理
构建未来:基于Android的智能家居控制系统开发
【4月更文挑战第29天】 随着物联网技术的蓬勃发展,智能家居已成为现代技术革新的重要领域。本文将深入探讨基于Android平台的智能家居控制系统的设计和实现,旨在提供一种用户友好、高度集成且功能丰富的解决方案。通过利用Android设备的广泛普及和其强大的处理能力,结合最新的无线通讯技术和人工智能算法,我们旨在打造一个可靠、易用且具有高度可定制性的智能家居控制环境。文中不仅详细阐述了系统架构、关键技术选型以及界面设计,还对可能遇到的安全挑战进行了分析,并提出了相应的解决策略。
|
6天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
22天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
25天前
|
监控 算法 Android开发
安卓应用开发:打造高效启动流程
【4月更文挑战第5天】 在移动应用的世界中,用户的第一印象至关重要。特别是对于安卓应用而言,启动时间是用户体验的关键指标之一。本文将深入探讨如何优化安卓应用的启动流程,从而减少启动时间,提升用户满意度。我们将从分析应用启动流程的各个阶段入手,提出一系列实用的技术策略,包括代码层面的优化、资源加载的管理以及异步初始化等,帮助开发者构建快速响应的安卓应用。
|
25天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
30 1
Android开发之使用OpenGL实现翻书动画
|
25天前
|
Android开发 开发者
Android开发之通过渲染纹理展示地球仪
该文阐述了如何使用OpenGL为三维物体添加纹理,以增强其真实感。纹理坐标是二维的,用于标记摊平后的“布料”对应物体的哪个部位,类似裁缝制作衣服的过程。在OpenGL中,启用纹理和深度测试是关键,还包括设置纹理参数、分配纹理编号、绑定位图材质等步骤。计算材质的纹理坐标后,通过`glDrawArrays`结合顶点和纹理坐标逐个贴图。最终示例展示了将世界地图贴到球体上形成逼真的地球仪效果。通过控制旋转、平移和缩放,能实现简单的三维动画效果。
13 2
Android开发之通过渲染纹理展示地球仪
|
25天前
|
存储 缓存 Java
Android开发之利用GL10描绘点、线、面
本文介绍了如何使用GL10进行三维图形绘制。首先,每个点由三个浮点数(x, y, z)表示,数组大小为顶点数的三倍来构建平面。接着,通过`FloatBuffer`将浮点数组转换为OpenGL可识别的格式。绘制图形时,需启用和禁用顶点开关,并调用`glVertexPointer`指定顶点坐标和`glDrawArrays`绘制点、线、面。文中展示了绘制立方体线框的代码,包括顶点数组转换、立方体各面的定义以及绘制方法。最后,提到了球体的绘制概念。
8 1
Android开发之利用GL10描绘点、线、面