android基礎學習-android篇day13-UI基礎控制元件(下)
ImageView的scaleType的屬性理解
該屬性指定了你想讓ImageView
如何顯示圖片,包括是否進行縮放、等比縮放、縮放後展示位置等
scaleType
屬性既可以在 XML 中設定,也可以在程式碼中設定:
android:scaleType="centerInside" //XML中
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); //程式碼中
八個ScaleType
,其實可以分為三個型別:
- 以
FIT_
開頭的4種,它們的共同點是都會對圖片進行縮放; - 以
CENTER_
開頭的3種,它們的共同點是居中顯示,圖片的中心點會與ImageView
的中心點重疊; 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控制元件可以有多個,但同時有且只僅有一個可以被選中
- 單選按鈕的實現
- 在xml檔案中定義RadioGroup
- 在RadioGroup中新增RadioButton
- 在Java程式碼中獲取控制元件物件
- 為物件新增監聽器
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的流程
- 建立一個Activity的子類
- 重寫onCreate方法,當前Activity的入口
- 在AndroidManifest.xml中註冊
- AndroidManifest中有這段程式碼的就是預設開啟的第一個介面
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
啟動一個Activity的流程
- -建立Intent意圖物件(連線四大元件的紐帶,可以實現介面切換,可以包含動作和動作資料)
- -呼叫setClass設定要啟動哪個Activity
- -呼叫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會被銷燬。
相關文章
- android基礎學習-android篇day12-UI基礎控制元件(上)AndroidUI控制元件
- android基礎學習-android篇day12-android的UI基礎入門AndroidUI
- android基礎學習-android篇day14-UI基礎控制元件綜合案例——點餐系統AndroidUI控制元件
- android基礎學習-android篇day16-Menu的使用Android
- android基礎學習-android篇day16-Dialog的使用Android
- android基礎學習-android篇day17-Android Fragment(碎片)基本使用AndroidFragment
- Android基礎知識學習Android
- Android 面試基礎篇Android面試
- android基礎學習-android篇day11-android的入門工具安裝流程Android
- android基礎學習-android篇day17-Activity的生命週期(轉)Android
- Android面試之Java 基礎篇Android面試Java
- android基礎學習-android篇day15-相對佈局的常用屬性Android
- Android基礎—FragmentAndroidFragment
- Python基礎學習篇Python
- Android基礎知識Android
- Android 基礎之 HandlerAndroid
- Android 繪圖基礎Android繪圖
- 【Android繪圖】繪圖之基礎篇(一)Android繪圖
- 深入瞭解Android藍芽Bluetooth——《基礎篇》Android藍芽
- android基礎學習-java篇day7-step3-第三節:java字串AndroidJava字串
- android基礎學習-java篇day8-step3-第四節:java集合AndroidJava
- Android基礎-Activity基本使用Android
- 詳解 Android 中的 IPC 機制:基礎篇Android
- MySQL學習筆記【基礎篇】MySql筆記
- JAVA基礎學習篇之反射Java反射
- Android面試之——數學基礎知識Android面試
- iOS學習筆記——基礎控制元件(上)iOS筆記控制元件
- Android 自定義View基礎(一)AndroidView
- android混淆總結(基礎版)Android
- Android基礎之Activity全解析Android
- Linux基礎學習——檔案基礎Linux
- Gradle For Android (一) 基礎定義與依賴管理篇GradleAndroid
- android基礎學習-java篇day9-step3-第五節:java執行緒AndroidJava執行緒
- [效能測試] locust學習-基礎篇
- TypeScript學習文件-基礎篇(完結)TypeScript
- 深入學習Netty(一)NIO基礎篇Netty
- Android AOSP基礎(二)是時候下載Android9.0原始碼了Android原始碼
- android基礎學習-java篇day11-綜合測試-播放器管理系統AndroidJava播放器