Android自定义控件系列案例【三】

自定义控件的目的有很多,比如系统控件满足不了需求时,我们会想到通过自定义控件来满足需求。其实有的时候为了功能的复用我们也会去自定义控件,把经常要用的或以后要用的与UI相关的功能封装到自定义控件中,让它成为独立的功能,当然为了灵活的控制其中的可变部分,自定义的控件应该预留接口(这里说的接口不是Java中的Interface,是控制可变部分的方式,比如方法之类的)。

接下来的案例用普通的GridView+Adapter也可以实现效果图中的功能,但为了将来复用,我们可以把效果图中的键盘逻辑封装到自定义控件中。

案例描述:

在类似猜成语,猜歌名,猜明星,猜车标,猜电影电视剧等一系列的项目中,都会有一个共同的模块-键盘,用户点击键盘中的文字,代表一个用户输入,其中键盘中包含正确答案和干扰答案,并且一般都是乱序的,而且每一关的干扰答案都不一样,本案例要做的就是实现键盘模块,并通过SeekBar进度的改变模拟不同关卡下键盘上的文字相应的改变(相当于重新洗牌)。

案例效果:




案例实现:

实现方式一 :GridView+Adapter

第一步:布局实现

(1)主界面布局 activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <GridView
        android:id="@+id/gv_keys"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:numColumns="8" />

    <SeekBar
        android:id="@+id/sb_level"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:max="9" />

</RelativeLayout>
(2)按健布局 key_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id = "@+id/btn_key"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:textColor="#1773CE"
    android:textSize = "22sp"
    android:textStyle="bold"
    android:background="@drawable/key_bg">
    

</Button>
其中使用了一个带选择器的背景,drawable/key_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/word_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/word"/>

</selector>
背景选择器中使用了两张图片drawable-hdpi/word.png,drawable-hdpi/word_pressed.png,分别会在普通状态与按下状态显示。

第二

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值