android基础学习-android篇day13-UI基础控件(下)

ImageView的scaleType的属性理解

该属性指定了你想让ImageView如何显示图片,包括是否进行缩放、等比缩放、缩放后展示位置等

scaleType属性既可以在 XML 中设置,也可以在代码中设置:

android:scaleType="centerInside"          //XML中
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);    //代码中

八个ScaleType,其实可以分为三个类型:

  1. FIT_开头的4种,它们的共同点是都会对图片进行缩放;
  2. CENTER_开头的3种,它们的共同点是居中显示,图片的中心点会与ImageView的中心点重叠;
  3. ScaleType.MATRIX,使用时特别注意;
android:scaleType=“center”  保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size时,多出来的部分被截掉。 
android:scaleType=“center_inside”  以原图正常显示为目的,如果原图大小大于ImageView的size,就按照比例缩小原图的宽高,居中显示在ImageView中。如果原图size小于ImageView的size,则不做处理居中显示图片。 
.android:scaleType=“center_crop”  以原图填满ImageView为目的,如果原图size大于ImageView的size,则与center_inside一样,按比例缩小,居中显示在ImageView上。如果原图size小于ImageView的size,则按比例拉升原图的宽和高,填充ImageView居中显示。 
androd:scaleType=“fit_xy”  把图片按照指定的大小在ImageView中显示,拉伸显示图片,不保持原比例,填满ImageView. 
android:scaleType=“fit_start”  把原图按照比例放大缩小到ImageView的高度,显示在ImageView的start(前部/上部)。 
android:sacleType=“fit_center”  把原图按照比例放大缩小到ImageView的高度,显示在ImageView的center(中部/居中显示)
android:scaleType=“fit_end”  把原图按照比例放大缩小到ImageView的高度,显示在ImageVIew的end(后部/尾部/底部)
android:scaleType=“matrix” 

不改变原图的大小,从ImageView的左上角开始绘制,超出部分做剪切处理。  

最后一个模式需要与ImageView.setImageMatrix(Matrix matrix) 配合使用,因为该模式需要用于指定一个变换矩阵用于指定图片如何展示。

另外注意,在使用时,需要先调用

imageView.setScaleType(ImageView.ScaleType.MATRIX);

再调用

imageView.setImageMatrix(matrix);

注意顺序不要搞错,否则会出现问题的。下面看一下代码:

imageView.setScaleType(ImageView.ScaleType.MATRIX);  //设置为矩阵模式

Matrix matrix = new Matrix();           //创建一个单位矩阵
matrix.setTranslate(100, 100);          //平移x和y各100单位
matrix.preRotate(30);                   //顺时针旋转30度
imageView.setImageMatrix(matrix);       //设置并应用矩阵

原图的size小于ImageView的size时                                                         原图的size大于ImageView的size时

 

CheckBox的基本应用

设置监听器:OnCheckedChangeListener

package com.example.ui;

import java.util.ArrayList;
import java.util.List;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
	private CheckBox cb_run, cb_sing, cb_dance;
	private Button bt_all, bt_notall, bt_show;
	private TextView tx_show;
	private List<String> list;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.checkbox);
		// 初始化
		initView();
		setListener();
		initData();
	}

	private void initData() {
		// 创建一个数组,保存显示的内容
		list = new ArrayList<String>();
	}

	public void initView() {
		cb_run = (CheckBox) findViewById(R.id.cb_run);
		cb_sing = (CheckBox) findViewById(R.id.cb_sing);
		cb_dance = (CheckBox) findViewById(R.id.cb_dance);
		bt_all = (Button) findViewById(R.id.btn_All);
		bt_notall = (Button) findViewById(R.id.btn_notAll);
		bt_show = (Button) findViewById(R.id.btn_showResult);
		tx_show = (TextView) findViewById(R.id.tx_Result);
	}

	// 给每个checkBox和btn设置监听函数
	public void setListener() {
		cb_run.setOnCheckedChangeListener(new cbOnCheckListener());
		cb_sing.setOnCheckedChangeListener(new cbOnCheckListener());
		cb_dance.setOnCheckedChangeListener(new cbOnCheckListener());
		bt_all.setOnClickListener(new btnOnClickLsitener());
		bt_notall.setOnClickListener(new btnOnClickLsitener());
		bt_show.setOnClickListener(new btnOnClickLsitener());

	}

	// 创建一个类实现监听,隐藏类监听
	class cbOnCheckListener implements OnCheckedChangeListener {

		@Override
		public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
			// 当选中状态发生改变时触发
			CheckBox checkbox = (CheckBox) arg0;// CheckBox是CompoundButton的子类,强转成CheckBox
			switch (checkbox.getId()) {// 通过获取id来获取每个CheckBox的状态
			case R.id.cb_run:
				if (cb_run.isChecked()) {
					cb_run.setTextColor(Color.RED);
					Toast.makeText(MainActivity.this, "运动很好" + arg1,
							Toast.LENGTH_SHORT).show();
				} else {
					cb_run.setTextColor(Color.BLACK);
					Toast.makeText(MainActivity.this, "不运动不好" + arg1,
							Toast.LENGTH_SHORT).show();
				}
				break;
			case R.id.cb_sing:
				Toast.makeText(MainActivity.this, "唱歌" + arg1,
						Toast.LENGTH_SHORT).show();
				break;
			case R.id.cb_dance:
				Toast.makeText(MainActivity.this, "跳舞" + arg1,
						Toast.LENGTH_SHORT).show();
				break;

			}

		}

	}

	// 创建一个隐藏内部类实现监听
	class btnOnClickLsitener implements OnClickListener {

		@Override
		public void onClick(View arg0) {
			// 当按钮发生改变
			switch (arg0.getId()) {// 通过id来判断哪个按钮被点击
			case R.id.btn_All:
				// 如何全选,则设置选择框的属性都是被选中状态
				cb_dance.setChecked(true);
				cb_sing.setChecked(true);
				cb_run.setChecked(true);
				break;

			case R.id.btn_notAll:
				// 如何全部选,则设置选择框的属性都是未选中状态
				cb_dance.setChecked(false);
				cb_sing.setChecked(false);
				cb_run.setChecked(false);
				break;
			case R.id.btn_showResult:// 显示选中的结果
				if (cb_run.isChecked()) {
					list.add(cb_run.getText().toString());
				}
				if (cb_sing.isChecked()) {
					list.add(cb_sing.getText().toString());
				}
				if (cb_dance.isChecked()) {
					list.add(cb_dance.getText().toString());
				}
				tx_show.setText(list.toString());
				list.clear();//每次执行完清空
				break;
			default:
				break;
			}

		}

	}

}

效果图: 

RadioButton的使用步骤

  • 1、RadioButton是圆形单选框
  • 2、RadioGroup是一个可以容纳多个RadioButton的容器
  • *在RadioGroup中RadioButton控件可以有多个,但同时有且只仅有一个可以被选中
  • 单选按钮的实现
  1. 在xml文件中定义RadioGroup
  2. 在RadioGroup中添加RadioButton
  3. 在Java代码中获取控件对象
  4. 为对象添加监听器
package com.example.ui;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class RadioButtonDemo extends Activity {
	private RadioGroup rg_sex;
	private RadioButton rb_Male, rb_FeMale;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.radiobutton);
		// 获取对象
		rg_sex = (RadioGroup) findViewById(R.id.rg_sex);
		rb_Male = (RadioButton) findViewById(R.id.rb_Male);
		rb_FeMale = (RadioButton) findViewById(R.id.rb_FeMale);
		//为radiogroup设置监听
		rg_sex.setOnCheckedChangeListener(new myRadioButtonListener());

	}

	class myRadioButtonListener implements OnCheckedChangeListener {

		@Override
		public void onCheckedChanged(RadioGroup arg0, int arg1) {
			// 选中状态改变时触发
			switch (arg1) {
			case R.id.rb_Male:// 选中男性
				Log.i("sex", "选中男性" + rb_Male.getText().toString());
				break;
			case R.id.rb_FeMale:// 选中女性
				Log.i("sex", "选中女性" + rb_FeMale.getText().toString());
				break;

			default:
				break;
			}

		}

	}

}

 状态开关按钮(ToggleButton)ToggleButton的使用

  • android:disabledAlpha:"" //设置按钮在禁用时的透明度
  • android:textOff:"" //按钮没有被选中时显示的文字
  • android:textOn:"" //按钮被选中时显示的文字(默认状态)
package com.example.ui;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ToggleButton;

public class ToggleButtonDemo extends Activity {
	private ToggleButton toggleButton;
	private ImageView iv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.togglebutton);
		toggleButton = (ToggleButton) findViewById(R.id.tb);
		iv=(ImageView) findViewById(R.id.iv);
		// 匿名内部类方法设置监听函数
		toggleButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				if (toggleButton.isChecked()) {
					Toast.makeText(ToggleButtonDemo.this,
							toggleButton.getText().toString(),
							Toast.LENGTH_SHORT).show();
					iv.setImageResource(R.drawable.icon1);
				} else {
					Toast.makeText(ToggleButtonDemo.this,
							toggleButton.getText().toString(),
							Toast.LENGTH_SHORT).show();
					iv.setImageResource(R.drawable.icon2);
				}

			}
		});
	}

}

开关按钮(ToggleButton)与开关(Switch)的功能与用法 

状态开关按钮(ToggleButton)与开关(Switch)也是由 Button 派生出来的,因此它们的本质也是按钮,Button 支持的各种属性、方法也适用于 ToggleButton 和 Switch。从功能上来看,ToggleButton、Switch 与 CheckBox 复选框非常相似,它们都可以提供两个状态。不过 ToggleButton、Switch 与 CheckBox 的区别主要体现在功能上,ToggleButton、Switch 通常用于切换程序中的某种状态。

ToggleButton 所支持的 XML 属性及相关方法的说明

XML属性 相关方法 说明
android:checked setChecked(boolean) 设置该按钮是否被选中
android:textOff   设置当该按钮的状态关闭时显示的文本
android:textOn   设置当该按钮的状态打开时显示的文本

Switch 支持的 XML 属性及相关方法说明

XML 属性 相关方法 说明
android:checked setChecked(boolean) 设置该开关是否被选中
android:switchMinWidth setSwitchMinWidth(int) 设置该开关的最小宽度
android:switchPadding setSwitchPadding(int) 设置开关与标题文本之间的空白
android:switchTextAppearance setSwitchTextAppearance(Context,int) 设置该开关图标上的文本样式
android:textOff setTextOff(CharSequence) 设置该开关的状态关闭时显示的文本
android:textOn setTextOn(CharSequence) 设置该开关的的状态打开时显示的文本
android:textStyle setSwitchTypeface(Typeface) 设置该开关的文本的风格
android:thumb setThumbResource(int) 指定使用自定义Drawable 绘制该开关的开关按钮
android:track setTrackResource(int) 指定使用自定义Drawable 绘制该开关的开关轨道
android:typeface setSwitchTypeface(Typeface) 设置该开关的文本的字体风格

SeekBar控件:可拖动进度条的基本使用

Android 中组件有很多种,其中 SeekBar 就是其中经常见到的组件之一。

SeekBar 是滑动条组件,在音视频的播放器的下面经常看到。

该组件的属性:

  • ·android:max 设置范围最大值
  • ·android:progress 设置当前进度值
  • ·android:secondaryProgress 设置当前次进度值
  • ·android:progressDrawable 设置进度条的图片
  • ·android:thumb 设置进度条的滑块的图片

常用的方法:

  • ·getMax()
  • ·getProgress()
  • ·setMax(int)
  • ·setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener l)

监听器 SeekBar.OnSeekBarChangeListener 中可以监听三种事件:

  • 数值的改变 (onProgressChanged) 
  • 开 始 拖 动 (onStartTrackingTouch) 
  • 停 止 拖 动 (onStopTrackingTouch)

需要说明的是属性 progressDrawable 和 thumb 的任意设置可以得到不同显示效果的滑 动条。
监听器 SeekBar.OnSeekBarChangeListener 很重要,可以响应重要的事件。

package com.example.ui;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class seekbarDemo extends Activity {
	private SeekBar sb;
	private TextView tv1, tv2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.seekbar);
		sb = (SeekBar) findViewById(R.id.sb);
		tv1 = (TextView) findViewById(R.id.tv);
		tv2 = (TextView) findViewById(R.id.tv2);
		// 设置进度条最大值
		sb.setMax(100);
		// 设置当前进度
		sb.setProgress(30);
		sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

			@Override
			public void onStopTrackingTouch(SeekBar arg0) {
				// 在结束拖动进度条时触发

			}

			@Override
			public void onStartTrackingTouch(SeekBar arg0) {
				// 在开始拖动进度时发化时触发
				tv1.setText("初始进度值为:" + sb.getProgress() + " ");
				// Log.i("progress",sb.getProgress()+"初始进度 ");
			}

			@Override
			public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
				// T在拖动进度发生变化时触发
				/*
				 * 3个参数 1、当前绑定的seekbar对象 2、当前进度数值 3、是否为用户手动触发
				 */
				tv2.setText("拖动后的进度值为:" + sb.getProgress() + " ");
				// Log.i("progress", sb.getProgress()+"拖动后的进度");
			}
		});

	}

}

ProgressBar 进度条

内容概览:

  • Android中的进度条
  • ProgressBar 样式
  • ProgressBar 进度
  • ProgressBar  常用方法

 

 Progress样式:

  • 默认圆形
  • 超大号圆形
  • 小号圆形
  • 水平方向-长条形

ProgeressBar-进度 

  • max:最大进度值
  • progress:当前进度值
  • SecondaryProgress:次要进度值

ProgeressBar-常用方法

  • isInterminate():判断当前进度条状态
  • incremen(Secondary)ProgressBy(int arg0):累加进度值

通过按钮动态更改progress的进度

package com.example.ui;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

/*
 * 通过按钮动态更改progress的进度
 */

public class ProgressBarDemo extends Activity {
	private ProgressBar pb;
	private Button bt1, bt2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.progressbar);
		initView();
		pb.setMax(100);
		pb.setProgress(30);// 第一进度
		pb.setSecondaryProgress(50);// 第二进度
		bt1.setOnClickListener(new progressbarListener());
		bt2.setOnClickListener(new progressbarListener());
	}

	private void initView() {
		pb = (ProgressBar) findViewById(R.id.pb);
		bt1 = (Button) findViewById(R.id.bt_add1);
		bt2 = (Button) findViewById(R.id.bt_add2);

	}

	class progressbarListener implements OnClickListener {

		@Override
		public void onClick(View arg0) {
			switch (arg0.getId()) {
			case R.id.bt_add1:
				pb.incrementProgressBy(20);// 首要进度值累加20
				break;
			case R.id.bt_add2:
				pb.incrementSecondaryProgressBy(40);// 次要进度值累加40

				break;

			default:
				break;
			}

		}

	}

}

RatingBar评分条的使用:

  <RatingBar 
        android:id="@+id/ratingbar_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:isIndicator="false"
        android:numStars="5"
        android:stepSize="0.5"/>
		rb=(RatingBar) findViewById(R.id.ratingbar_id);
		rb.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
			
			@Override
			public void onRatingChanged(RatingBar arg0, float arg1, boolean arg2) {
				// 1、当前绑定的ratingbar的对象 
				//2、当前评分的进度 
				//3、是否由用户触发
				Toast.makeText(RatingBarDemo.this, "我是ratingbar", Toast.LENGTH_SHORT).show();
				Log.i("out", "当前ratingbar的评分:"+arg1+"是否来自用户"+arg2+"当前评分刻度"+arg0.getStepSize());
				
				
				
			}
		});

DatePicker日期选择器和TimePicker的使用

package com.example.ui;

import java.util.Calendar;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.Toast;

public class DatePickerDemo extends Activity {
	private DatePicker dp;
	private TimePicker tp;
	private TextView tv;
	private int Year, Month, Day, Hour, Minute;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.datepicker);
		initView();
		getCurrentTime();
		setPicker();
	}

	private void getCurrentTime() {
		// 获取系统当前时间
		Calendar calendar = Calendar.getInstance();
		Year = calendar.get(Calendar.YEAR);
		Month = calendar.get(Calendar.MONTH);
		Day = calendar.get(Calendar.DAY_OF_MONTH);
		Hour = calendar.get(Calendar.HOUR);
		Minute = calendar.get(Calendar.MINUTE);

	}

	private void setPicker() {
		// 设置时间选择器为24小时
		tp.setIs24HourView(true);
		// 设置时间选择器的当前时间
		tp.setCurrentHour(Hour);
		tp.setCurrentMinute(Minute);
		tp.setOnTimeChangedListener(new OnTimeChangedListener() {

			@Override
			public void onTimeChanged(TimePicker arg0, int arg1, int arg2) {
				// 当时间选择器发生改变时触发(对象,小时,分钟)
				Log.i("TimePicker", arg1 + "-" + arg2);
				Hour = arg1;
				Minute = arg2;

			}
		});
		// 设置日期选择器的时间
		dp.init(Year, Month, Day, new OnDateChangedListener() {

			@Override
			public void onDateChanged(DatePicker arg0, int arg1, int arg2,
					int arg3) {
				Toast.makeText(DatePickerDemo.this, "a", Toast.LENGTH_LONG)
						.show();
				// 对象,年,月,日
				Log.i("DatePicker", arg1 + "-" + (arg2 + 1) + "-" + arg3);
				// 将时间日期显示在textview上
				tv.setText(+arg1 + "-" + (arg2 + 1) + "-" + arg3 + " " + Hour
						+ "-" + Minute);

			}

		});

	}

	private void initView() {
		// 获取对象
		dp = (DatePicker) findViewById(R.id.dp);
		tp = (TimePicker) findViewById(R.id.tp);
		tv = (TextView) findViewById(R.id.dp_tv);

	}

}

Activity的管理

  • 内容概在一个应用程序中定义多个Activity
  • 启动一个Activity
  • Android当中的back stack

创建一个Activity的流程

  1. 创建一个Activity的子类
  2. 重写onCreate方法,当前Activity的入口
  3. 在AndroidManifest.xml中注册
  4. AndroidManifest中有这段代码的就是默认打开的第一个界面
 <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>

启动一个Activity的流程

  1. -创建Intent意图对象(连接四大组件的纽带,可以实现界面切换,可以包含动作和动作数据)
  2. -调用setClass设置要启动哪个Activity
  3. -调用startActivity进行跳转
	bt=(Button) findViewById(R.id.bt);
		bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				/*
				 * 启动一个activity
				 * 1.创建Intent对象
				 * 2.调用setClass你要跳转哪个activity
				 * 3.startActivity
				 */
				Intent intent =new Intent();
				//当前Activity,你要跳转的Activity
				intent.setClass(Activity1.this, Activity02.class);
				startActivity(intent);
			}
		});

BackStack回退栈

栈的作用:是一个先进后出的结构,回退栈中只显示最上面的Activity,主要用于维护记录Activity的启动顺序,

backStack中可存多个Activity,但操作系统中只显示此Activity对象,其它Acitivity对象都会被压入到栈中,

当按back键,栈顶端的Activity会被销毁。

猜你喜欢

转载自blog.csdn.net/qq_17846019/article/details/82740439