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();
    }
}
原文地址:https://www.cnblogs.com/pengjingya/p/5508709.html