編輯:關於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日歷控件的使用方法,供大家參考,具體內容如下MainActivity.java代碼:package siso.timessquare;i
android開發中,對於復用率較高的多個控件,采用組件的方式可能更加方便,首先定義一個xml文件: 文件名:lyt_customer_service_phone.xml
很多APP都有側滑菜單的功能,部分APP左右都是側滑菜單~SlidingMenu 這個開源項目可以很好幫助我們實現側滑功能,如果對SlidingMenu 還不是很了解的童
本文實例為大家分享了閃耀字體效果的具體代碼,供大家參考,具體內容如下import android.content.Context;import android.graph