按钮和图像
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();
}
}