zoukankan      html  css  js  c++  java
  • 14、Android--按钮和图像

    按钮和图像

    Android中的按钮控件包含如下几种:

    Button、ImageButton

    ImageView

    这里会介绍关于Button和ImageView的基本用法。

    Button

    Button继承自TextView,在Android开发中,Button是常用的控件它包含的方法如下:

    方法 描述
    Button 类的构造方法
    onKeyDown 当用户按键时,该方法调用
    onKeyUp 当用户按键弹起后,该方法被调用
    onKeyLongPress 当用户保持按键时,该方法被调用
    onKeyMultiple 当用户多次调用时,该方法被调用
    invalidateDrawable 刷新 Drawable 对象
    scheduleDrawable 定义动画方案的下一帧
    unscheduleDrawable 取消 scheduleDrawable 定义的动画方案
    onPreDraw 设置视图显示,列如在视图显示之前调整滚动轴的边界
    sendAccessibilityEvent 发送事件类型指定的 AccessibilityEvent。发送请求之前,需要检查Accessibility 是否打开
    sendAccessibilityEventUnchecked 发送事件类型指定的 AccessibilityEvent。发送请求之前,不需要检查Accessibility 是否打开
    setOnKeyListener 设置按键监听

    Button包含的属性如下表所示:

    属性 描述
    android:layout_height 设置控件高度。可选值:fill_parent,warp_content,px
    android:layout_width 设置控件宽度,可选值:fill_parent,warp_content,px
    android:text 设置控件名称,可以是任意字符
    android:layout_gravity 设置控件在布局中的位置,可选项:top,left,bottom,right,center_vertical,fill_vertica,fill_horizonal,center,fill等
    android:layout_weight 设置控件在布局中的比重,可选值:任意的数字。
    android:textColor 设置文字的颜色
    android:bufferType 置取得的文本类别,normal、spannable、editable
    android:textColorHighlight 设置文本被选中时,高亮显示的颜色
    android:inputType 设置文本的类型,none,text,textWords 等

    基本用法

    1、给Button设置点击事件

    findViewById(R.id.btn_click_one).setOnClickListener(onClickListener);
    

    点击之后弹出Toast提示:

    private View.OnClickListener onClickListener=new View.OnClickListener() {
            @Override
            public void onClick(View v){
                Toast.makeText(MainActivity.this,"Button点击事件1",Toast.LENGTH_LONG).show();
            }
        };
    

    2、在xml中为Button设置android:onClick="click"属性,必须符合三个条件:

    1、方法的修饰符是 public
    2、返回值是 void 类型
    3、只有一个参数View,这个View就是被点击的这个控件。

    具体代码如下所示:

    public void click(View v){
    	switch (v.getId()){
    		case R.id.btn_click_two:
    			Toast.makeText(MainActivity.this,"Button点击事件2",Toast.LENGTH_LONG).show();
    			break;
    	}
    }
    

    3、为Button设置背景,比如背景图片、背景颜色和shape等。

    // 设置背景图片
    android:background="@mipmap/icon_button_bg"
    // 设置背景颜色
    android:background="@android:color/holo_red_dark" 
    // 设置背景shape
    android:background="@drawable/shape_button_test"    
    

    其中使用到的shape_button_test.xml如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <!--     默认背景色 -->
        <solid android:color="@android:color/transparent"/>
        <!-- 边框 -->
        <stroke
            android:width="1dp"
            android:color="@android:color/black" />
        <!--     设置弧度 -->
        <corners
            android:radius="20dp"/>
    </shape>
    

    4、style属性可以为Button设置系统自带的样式

    style="@style/Widget.AppCompat.Button.Colored"
    

    这是V7包里面自带的style样式。其中系统的样式有部分如下所示:

    <style name="Widget.AppCompat.Button" parent="Base.Widget.AppCompat.Button"/>
    <style name="Widget.AppCompat.Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless"/>
    <style name="Widget.AppCompat.Button.Borderless.Colored" parent="Base.Widget.AppCompat.Button.Borderless.Colored"/>
    <style name="Widget.AppCompat.Button.ButtonBar.AlertDialog" parent="Base.Widget.AppCompat.Button.ButtonBar.AlertDialog"/>
    <style name="Widget.AppCompat.Button.Colored" parent="Base.Widget.AppCompat.Button.Colored"/>
    <style name="Widget.AppCompat.Button.Small" parent="Base.Widget.AppCompat.Button.Small"/>
    <style name="Widget.AppCompat.ButtonBar" parent="Base.Widget.AppCompat.ButtonBar"/>
    <style name="Widget.AppCompat.ButtonBar.AlertDialog" parent="Base.Widget.AppCompat.ButtonBar.AlertDialog"/>
    <style name="Widget.AppCompat.CompoundButton.CheckBox" parent="Base.Widget.AppCompat.CompoundButton.CheckBox"/>
    <style name="Widget.AppCompat.CompoundButton.RadioButton" parent="Base.Widget.AppCompat.CompoundButton.RadioButton"/>
    <style name="Widget.AppCompat.CompoundButton.Switch" parent="Base.Widget.AppCompat.CompoundButton.Switch"/>
    <style name="Widget.AppCompat.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle">
    	<item name="color">?attr/colorControlNormal</item>
    </style>
    

    其中,ImageButton的使用和Button的使用类似,只是它是用图片的形式来展示按钮,这里不详细介绍。

    ImageView

    ImageView控件负责显示图片,其图片的来源既可以是资源文件的id,也可以是Drawable对象或Bitmap对象,还可以是Content Provider的URI。

    方法 描述
    setAlpha(int alpha) 设置ImageView的透明度
    setImageBitmap(Bitmap bm) 设置ImageView所显示的内容为指定的Bitmap对象
    setImageDrawable(Drawable drawable) 设置ImageView所显示的内容为指定的Drawable对象
    setImageResource(int resId) 设置ImageView所显示的内容为指定id的资源
    setImageURI(Uri uri) 设置ImageView所显示的内容为指定Uri
    setSelected(boolean selected) 设置ImageView的选中状态

    ImageView包含的属性如下表所示:

    属性 描述
    android:adjustViewBounds 设置是否需要ImageView调整自己的边界来保证显示图片的长宽比例
    android:maxHeight ImageView的最大高度,可选
    android:maxWidth ImageView的最大宽度,可选
    android:scaleType 控制图片调整或移动来适合ImageView的尺寸
    android:src 设置ImageView要显示的图片

    如果需要改变图片的颜色,可以使用tink属性进行修改。

    ScaleType

    android:scaleType用于设置显示的图片如何缩放或者移动以适应ImageView的大小,可选值如下:

    fitXY:对图像的横向与纵向进行独立缩放,使得该图片完全适应ImageView,但是图片的横纵比可能会发生改变
    fitStart:保持纵横比缩放图片,知道较长的边与Image的编程相等,缩放完成后将图片放在ImageView的左上角
    fitCenter:同上,缩放后放于中间;
    fitEnd:同上,缩放后放于右下角;
    center:保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。
    centerCrop:保持横纵比缩放图片,知道完全覆盖ImageView,可能会出现图片的显示不完全
    centerInside:保持横纵比缩放图片,直到ImageView能够完全地显示图片
    matrix:默认值,不改变原图的大小,从ImageView的左上角开始绘制原图, 原图超过ImageView的部分作裁剪处理

    RoundImageView

    自定义ImageView:RoundImageView.java

    public class RoundImageView extends ImageView {
        private Bitmap mBitmap;
        private Rect mRect = new Rect();
        private PaintFlagsDrawFilter pdf = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG);
        private Paint mPaint = new Paint();
        private Path mPath=new Path();
        public RoundImageView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        //传入一个Bitmap对象
        public void setBitmap(Bitmap bitmap) {
            this.mBitmap = bitmap;
        }
        private void init() {
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
            mPaint.setAntiAlias(true);// 抗锯尺
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            if(mBitmap == null)
            {
                return;
            }
            mRect.set(0,0,getWidth(),getHeight());
            canvas.save();
            canvas.setDrawFilter(pdf);
            mPath.addCircle(getWidth() / 2, getWidth() / 2, getHeight() / 2, Path.Direction.CCW);
            canvas.clipPath(mPath, Region.Op.REPLACE);
            canvas.drawBitmap(mBitmap, null, mRect, mPaint);
            canvas.restore();
        }
    }
    
  • 相关阅读:
    购物车案例详解。利用cookie
    设计模式8种
    设计模式介绍
    Promise
    面向对象-拖拽
    本地存储
    闭包和继承
    move.js
    CDM指南之Agent管理
    失业的程序员九创业就是一场戏
  • 原文地址:https://www.cnblogs.com/pengjingya/p/5508709.html
Copyright © 2011-2022 走看看