編輯:關於Android編程
構建進度條
在XML布局文件中使用ProgressBar標簽布局視圖
android:id="@+id/progressbar" android:layout_width="match_parent" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Horizontal" /> 在Java代碼中使用android.widget.ProgressBar類操作視圖 ProgressBar bar = (ProgressBar)findViewById(R.id.progressbar); //設定進度條的取值范圍0~n bar.setMax(10);
在XML布局文件中使用SeekBar標簽布局視圖
android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content" />
在Java代碼中使用android.widget.SeekBar類操作視圖
SeekBar seekBar = (SeekBar)findViewById(R.id.seekbar);
seekBar.setMax(10);
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
//這裡填寫處理事件的代碼
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
構建評分視圖
XML布局文件中使用RatingBar標簽
android:id="@+id/ratingbar" android:layout_width=“wrap_content" android:layout_height="wrap_content” />
事件監聽接口為android.widget.RatingBar.OnRatingBarChangeListener,Java代碼中使用android.widget.RatingBar類
.RatingBar bar = (RatingBar)findViewById(R.id.ratingbar); //設定評分視圖顯示的星的顆數 bar.setNumStars(5); bar.setMax(10);
Handler簡介
Handler相關知識介紹
Android應用的主線程,在應用程序啟動時,Android會啟動一條負責界面事件處理的主線程,當界面事件需要處理很長時間時,應該將任務放在一個子線程中運行
子線程不應該修改界面,因為主線程在負責,如果修改則線程不安全,Handler為解決子線程與主線程通訊而設立,在主線程運行時創建Handler對象
Handler對象將自動綁定到主線程中,主線程將會在消息循環過程中不停處理Handler中的數據處理需求,Handler提供了多種方法用於給子線程提供傳遞數據的方法:
post()、postAtTime()、postDelay()
sendMessage()、sendMessageAtTime()、sendMessageDelay()
實現淘寶自動播放動畫步驟:
1.將要播放的動畫復制到drawable目錄
2.在布局文件中添加一個ImageView用於顯示圖片
3.在主線程中創建Handler處理圖片更換動作
4.創建Timer(Timer自身就會啟動一個子線程)定時發送消息
主視圖Activity,圖片資源代碼如下:
//ImageView對象,用於顯示圖片
private ImageView image;
//定義數組,存儲圖片資源
private int[] images = {
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4,
R.drawable.image5,
};
int index = 0;//圖片資源索引
定義Handler代碼如下:
Handler handler = new Handler(){
//處理消息
@Override
public void handleMessage(Message msg) {
//如果是該線程發送的消息
if(msg.what==1)
{
//動態修改圖片
image.setImageResource(images[index++%images.length]);
}
super.handleMessage(msg);
}
};
主視圖Activity,onCreate()方法代碼如下:
protected void onCreate(android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.handlertest);
image = (ImageView) findViewById(R.id.image);
//創建周期2秒的計時器,並創建執行任務
new Timer().schedule(new TimerTask() {
@Override
public void run() {
//發送一個what為1的空消息
handler.sendEmptyMessage(1);
}
},0,2000);
}
總結
上面代碼中,Timer用於周期性執行指定任務,Timer對象可調度TimerTask對 象,TimerTask對象的本質就是啟動一條新的線程,由於Android不允許其他線程修改Activity裡的UI界面(因為不安全),因此新線程 只能發送一條消息,通知主線程更新界面。
Handler的作用就是建立主線程和子線程之間的紐帶,子線程通過Handler對象發送消息,並回傳給Handler,這樣主線程就可以通過Handler處理消息了。
Handler機制原理解析
Handler工作中需要使用到以下組件:
Message:Handler接受和處理的消息對象
Looper:不斷(死循環)讀取MessageQueue中的Message對象,如果讀到Message就將Message傳遞給發送該消息的Handler進行處理。每個線程只有一個Looper對象
MessageQueue:消息隊列,以先進先出的方式管理Message對象,程序創建Looper對象時會在其構造器中創建MessageQueue對象
Handler的作用主要有兩個:
1.在新啟動的線程(子線程)中發送消息
2.在主線程中獲取、處理消息
子 線程使用Handler發送消息(Message),被發送的消息必須被送到指定的消息隊列(MessageQueue,由Looper管 理,Looper由子線程自己創建);主線程通過系統創建的Looper對象的looper()方法使用一個死循環不斷取出MessageQueue中的 消息,並交由Handler處理,進而實現主線程中視圖的改變
通過Handler消息傳遞機制修改Activity中文本信息
//創建Handler
Handler handler = new Handler(){
//處理消息
public void handleMessage(android.os.Message msg) {
if(msg.what==1)
{
txt.setText("update handler");
}
};
};
/啟動新線程發送消息
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);//線程沉睡3秒
handler.sendEmptyMessage(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
Android學習教程之日歷控件使用(7)
本文實例為大家分享了Android日歷控件的使用方法,供大家參考,具體內容如下MainActivity.java代碼:package siso.timessquare;i
android 實現自定義組件
android開發中,對於復用率較高的多個控件,采用組件的方式可能更加方便,首先定義一個xml文件: 文件名:lyt_customer_service_phone.xml
Android SlidingMenu使用和示例詳解
很多APP都有側滑菜單的功能,部分APP左右都是側滑菜單~SlidingMenu 這個開源項目可以很好幫助我們實現側滑功能,如果對SlidingMenu 還不是很了解的童
Android自定義View實現閃耀字體效果
本文實例為大家分享了閃耀字體效果的具體代碼,供大家參考,具體內容如下import android.content.Context;import android.graph