Android的界面组件使用之ImageButton和ImageView,ImageSwitcher和GridView

(一)ImageButton和ImageView

ImageButton与Button的功能完全相同,只是ImageButton上显示的是图像,并且每个ImageButton组件都必须指定一个id,以便在程序中使用该按钮,

android:src属性则是用来设置它显示的图像

ImageView是一个显示图像的组件,同样的他的src也是用来设置显示的图像的,在程序中可以调用ImageView的setImageResource()方法,来从项目资源类R中加载指定的图像文件。

接下来,完成昨天“猜拳游戏的美化版”,从网上找了三张石头剪子布的图片,放到drawable文件下。

界面布局文件:

<?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_height="match_parent"
    android:layout_width="400dp"
    android:layout_gravity="center_horizontal"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/txtTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/prompt_title"
        android:textColor="#FF00FF"
        android:textSize="40sp"
        android:textStyle="bold"
        android:layout_centerHorizontal="true"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"/>
    <TextView
        android:id="@+id/txtCom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/prompt_com_play"
        android:layout_below="@+id/txtTitle"
        android:layout_alignLeft="@+id/txtTitle"
        android:textSize="20sp"
        android:layout_marginBottom="20dp"
        android:layout_alignStart="@+id/txtTitle" />
    <TextView
        android:id="@+id/txtMyPlay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/prompt_my_play"
        android:layout_below="@id/txtTitle"
        android:layout_alignRight="@id/txtTitle"
        android:textSize="20sp"
        android:layout_marginBottom="20dp"
        android:layout_alignEnd="@id/txtTitle" />

    <ImageButton
        android:id="@+id/imgBtnScissors"
        android:layout_width="124dp"
        android:layout_height="107dp"
        android:layout_below="@id/txtMyPlay"
        android:layout_alignLeft="@id/txtMyPlay"
        android:layout_marginLeft="-2dp"
        android:layout_marginTop="17dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:scaleType="centerInside"
        android:src="@drawable/scissors" />

    <ImageView
        android:id="@+id/imgViewComPlay"
        android:layout_width="134dp"
        android:layout_height="123dp"
        android:layout_below="@id/imgBtnScissors"
        android:layout_alignLeft="@id/txtCom" />

    <ImageButton
        android:id="@+id/imgBtnStone"
        android:layout_width="127dp"
        android:layout_height="107dp"
        android:layout_below="@id/imgBtnScissors"
        android:layout_alignLeft="@id/imgBtnScissors"
        android:layout_marginLeft="1dp"
        android:layout_marginTop="14dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:scaleType="fitCenter"
        android:src="@drawable/stone" />

    <ImageButton
        android:id="@+id/imgBtnPaper"
        android:layout_width="125dp"
        android:layout_height="99dp"
        android:layout_below="@id/imgBtnStone"
        android:layout_alignLeft="@id/imgBtnStone"
        android:layout_marginLeft="-1dp"
        android:layout_marginTop="21dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:scaleType="fitCenter"
        android:src="@drawable/paper" />

    <TextView
        android:id="@+id/txtResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/result"
        android:layout_below="@id/imgBtnPaper"
        android:layout_alignLeft="@id/txtCom"
        android:textSize="20sp"
        android:textColor="#0000FF"
        android:layout_marginTop="20dp"
        android:layout_alignStart="@id/txtCom" />

</RelativeLayout>

程序文件:

package com.example.relativelayout;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {
    private TextView mTxtResult;
    private ImageView mImgViewComPlay;
    private ImageButton mImgBtnScissors,mImgBtnStone,mImgBtnPaper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mImgViewComPlay=(ImageView)findViewById(R.id.imgViewComPlay);
        mTxtResult=(TextView)findViewById(R.id.txtResult);
        mImgBtnStone=(ImageButton)findViewById(R.id.imgBtnStone);
        mImgBtnPaper=(ImageButton)findViewById(R.id.imgBtnPaper);
        mImgBtnScissors=(ImageButton)findViewById(R.id.imgBtnScissors);

        mImgBtnScissors.setOnClickListener(imgBtnScissorsOnClick);
        mImgBtnStone.setOnClickListener(imgBtnStoneOnClick);
        mImgBtnPaper.setOnClickListener(imgBtnPaperOnClick);
    }

    private View.OnClickListener imgBtnScissorsOnClick=new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            int iComPlay=(int)(Math.random()*3+1);
            //1.剪刀,2.石头,3.布
            if(iComPlay==1)
            {
                mImgViewComPlay.setImageResource(R.drawable.scissors);
                mTxtResult.setText(getString(R.string.result)+getString(R.string.player_draw));
            }
            else if(iComPlay==2)
            {
                mImgViewComPlay.setImageResource(R.drawable.stone);
                mTxtResult.setText(getString(R.string.result)+getString(R.string.player_lose));
            }
            else
            {
                mImgViewComPlay.setImageResource(R.drawable.paper);
                mTxtResult.setText(getString(R.string.result)+getString(R.string.player_win));
            }
        }
    };
    private View.OnClickListener imgBtnStoneOnClick=new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            int iComPlay=(int)(Math.random()*3+1);
            //1.剪刀,2.石头,3.布
            if(iComPlay==1)
            {
                mImgViewComPlay.setImageResource(R.drawable.scissors);
                mTxtResult.setText(getString(R.string.result)+getString(R.string.player_win));
            }
            else if(iComPlay==2)
            {
                mImgViewComPlay.setImageResource(R.drawable.stone);
                mTxtResult.setText(getString(R.string.result)+getString(R.string.player_draw));
            }
            else
            {
                mImgViewComPlay.setImageResource(R.drawable.paper);
                mTxtResult.setText(getString(R.string.result)+getString(R.string.player_lose));
            }
        }
    };
    private View.OnClickListener imgBtnPaperOnClick=new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            int iComPlay=(int)(Math.random()*3+1);
            //1.剪刀,2.石头,3.布
            if(iComPlay==1)
            {
                mImgViewComPlay.setImageResource(R.drawable.scissors);
                mTxtResult.setText(getString(R.string.result)+getString(R.string.player_lose));
            }
            else if(iComPlay==2)
            {
                mImgViewComPlay.setImageResource(R.drawable.stone);
                mTxtResult.setText(getString(R.string.result)+getString(R.string.player_win));
            }
            else
            {
                mImgViewComPlay.setImageResource(R.drawable.paper);
                mTxtResult.setText(getString(R.string.result)+getString(R.string.player_draw));
            }
        }
    };
}

字符串资源文件:

<resources>
    <string name="app_name">RelativeLayout</string>
    <string name="prompt_com_play">电脑出拳:</string>
    <string name="prompt_my_play">玩家出拳:</string>
    <string name="play_scissors">剪刀</string>
    <string name="play_stone">石头</string>
    <string name="play_paper">布</string>
    <string name="player_win">恭喜,你赢了</string>
    <string name="player_lose">很可惜,你输了</string>
    <string name="player_draw">双方平手!</string>
    <string name="prompt_title">和电脑猜拳</string>
    <string name="result">判断输赢:</string>
</resources>

应用截图:

(二)ImageSwitcher和GridView

网格试图(GridView)用于在界面上按行,列分布的方式来显示多个组件。

GridView和ListView有共同的父类:AbsListView,因此GridView和ListView具有一定的相似性。GridView和ListView的主要区别在于:ListView只是一个方向上的分布;而GridView则会在两个方向上分布。

与ListView相似的是,GridView也需要通过Adapter来提供显示数据:可以通过SimpleAdapter来为GridView提供数据,也可以通过开发BaseAdapter的子类来问GridView提供数据,不管使用那种方式,GridView和ListView的用法基本是一致的。

GridView中提供了常用的XML属性:

XML属性 相关方法 说明
android:columnWidth setColumnWidth(int) 设置列的宽度
android:gravity setGravity(int) 设置对齐方式
android:horizontalSpacing setHorizontalSpac(int) 设置各个元素之间的水平间距
android:numColumn setNumColumn(int) 设置列数
android:stretchMode setStretchMode(int) 设置拉伸模式
android:verticalSpacing setVerticalSpacing(int) 设置各个元素之间的垂直间距

注意:使用GridView时一般都应该指定numColumn大于1,否则该属性默认值为1,如果将属性设置为1,则意味着该Gridview只有一列,那Gridview就变成了Listview。

在上面表中提到的android:stretchMode属性支持如下几个属性值:

  • NO_STRETCH : 不拉伸
  • STRETCH_SPACING:仅拉伸元素之间的间距
  • STRETCH_SPACING_UNIFORM:表格元素本身、元素之间的间距一起拉伸
  • STRETCH_COLUMN_WIDTH:仅拉伸元素表格元素本身。

图片切换器(ImageSwitcher)是由FrameLayout派生而出,ImageSwitcher组件和ImageView很相似,他们都可用于显示图片,但是ImageView比ImageView多了一个功能:它所显示的图片切换是可以设置动画效果。

使用ImageSwitcher时往往需要为它设置一个ImageSwitcher.ViewFactory,来实现ImageSwitcher.ViewFactory时需要实现一个makeView()方法,该方法通常会返回一个Imageview而ImageSwitcher则负责显示这个ImageView。

原文地址:https://www.cnblogs.com/xiaofengzai/p/12241388.html

时间: 2024-10-12 11:59:37

Android的界面组件使用之ImageButton和ImageView,ImageSwitcher和GridView的相关文章

在Android 窗口小组件(Widget)中显示(StackView,ListView,GridView)集合View

在Android 3.0 中引入了 Collection View Widget.用于在窗口小组件中添加了对集合View 的支持. 如下: (1)StackView 一个卡片View,以层叠的方式显示其子View. (2)ListView 和传统的ListView一样 (3)GridView 网格列表.具体用法和传统的一样. 第一步:创建Widget布局文件    (1)Wdiget的布局文件 路径:res/layout/my_widget_layout.xml <?xml version=&quo

Android 自学之基本界面组件(下)

按钮(Button)与图片按钮(ImageButton)组件的功能和用法 Button继承了TextView,ImageButton继承了Button.不管是Button还是ImageButton,他们的功能都很单一,主要是在UI界面生成一个按钮,该按钮可以供用户单击,当用户单击按钮后出发一个Onclick事件. Button  和  ImageButton的不同在于Button生成的按钮显示文字,ImageButton生成的按钮显示图片.(关于ImageButton属性android:text

Android界面编程——Android高级UI组件(三)

Android界面编程 Android高级UI组件 2.4.1适配器组件 适配器的作用 适配器充当适配器控件和该视图数据之间的桥梁.适配器提供访问的数据项,并负责产生数据组中的每个项的视图. 常用的适配器 BaseAdapter:抽象类,具有较高的灵活性. ArrayAdapter:最为简单,智能展示一行文字. SimpleAdapter:有较好的扩充性,可以自定义出各种效果. SimpleCursorAdapter:主要用于操作数据库. 常用的适配器控制 适配器控件扩展自ViewAdapter

没事抽空学——常用界面组件属性

android:latout_width fill_parent 设置组件宽高,fill和wrap相同 match_parent wrap_content android:text 组件中文字 组件中文字 android:ems 数值和长度单位 英文字M的数倍 android:inputType text/number/date/time... 文字类型 android:background example:ff0000 6或6十六位进制数设置底色 android:textSize 数值 设置文

设计师可以写Android应用界面吗?

============问题描述============ 我是一名设计师,每次设计完app后把切好的图和效果图给开发后,开发们都要花大量时间对着效果图把界面效果写出来,弄好界面后才是开发功能. 而且开发写出来的界面和设计给的效果图经常会有差别,还需要反复修改. 我想问的是: 设计师是否可以直接把界面写好,再交给开发直接做功能就行呢?如果可以,需要设计师有编程的基础吗? 还想知道大公司里,设计与开发之间是怎么分工合作的? ============解决方案1============ 是可以的,但是需

Android开发四大组件之Service(实例篇)

关于Service的开发详解已经在上一篇:Android开发四大组件之Service(详解篇)讲的很清楚了,本篇主要对Service的开发实例做下讲解. 程序运行效果图: 程序代码: BindService: package com.jph.servicedemo; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; /**

Android中Intent组件详解

Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙述其所期望的服务或动作.与动作有关的数据等.Android则根据此Intent对象之叙述,负责配对,找出相配的组件,然后将 Intent对象传递给所找到的组件,Android的媒婆任务就完成了. 在Google Doc中是这样描述Intent的(摘自Android中文翻译组)当接收到ContentR

十八、Android引导界面

一.所需素材 很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import an

Android平台PreferenceActivity组件分析

1.PreferenceActivity 介绍 PreferenceActivity 继承ListActivity 它是以一个列表的形式在展现内容,它最主要的特点是添加Preference可以让控件的状态持久化储存,举个例子 比如用户选中checkbox后 退出应用然后在进入应用,这时用户希望看到的是checkbox被选中,所以软件须要记录用户每次操作的过程并且持久储存,在进入应用的时候须要判断这些久储存的数据然后将系统控件的状态呈现在UI中. 尤其是软件开发肯定会有一堆设置选项选项,每次进入A