1. 程式人生 > 其它 >TimePicker控制元件、幀動畫、補間動畫

TimePicker控制元件、幀動畫、補間動畫

1.TimePicker控制元件

最近感覺每個開發平臺的控制元件基本都差不多,在Android中控制元件的事件和.net控制元件直接寫事件有一定的區別,net事件可以直接介面進行事件的繫結哈。不過在Silverlight中,如果用MVVM設計模式的話,也可以自己為控制元件寫Command命令的,可以取代控制元件的事件。

TimePicker控制元件,也就是事件控制元件,可以用設定時間的。在頁面拖入控制元件後,預設是顯示系統時間的。

1     <TimePicker
2         android:id="@+id/timePicker1"
3         android:layout_width="wrap_content"
4         android:layout_height="wrap_content"
5         android:layout_alignLeft="@+id/textView1"
6         android:layout_alignTop="@+id/textView1" />

該控制元件可以通過OnTimeChangedListener監聽時間的改變,可以獲得時和分,並不能精確到秒。

 1         public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
 2                 // TODO 自動生成的方法存根
 3                 funTime(hourOfDay,minute);
 4             }
 5 private void funTime(int hourOfDay, int minute) {
 6         // TODO 自動生成的方法存根
 7         EditText myEdit=(EditText)findViewById(R.id.editText1);
 8         myEdit.setText("當前時間為:"+hourOfDay+"時"+minute+"分");
 9         
10     }

2.幀動畫

幀動畫,也就是將靜態影象連續播放的,播放的間隔可以自己設定。

首先需要在anim檔案下,新增一個animation-list型別的xml文件。

1 <animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
2     <item android:drawable="@drawable/bulb01" android:duration="500" android:visible="true"></item>
3 <item android:drawable="@drawable/bulb02" android:duration="500" android:visible="true"></item>
4 <item android:drawable="@drawable/bulb03" android:duration="500" android:visible="true"></item>
5 <item android:drawable="@drawable/bulb04" android:duration="500" android:visible="true"></item>
6 </animation-list>

這裡定義了4個物件,併為每個物件指定了drawable和duration。

然後可以通過button按鈕控制動畫的播放與停止

 1   protected void onCreate(Bundle savedInstanceState) {
 2         super.onCreate(savedInstanceState);
 3         setContentView(R.layout.activity_main);
 4         myTime=(TimePicker)findViewById(R.id.timePicker1);
 5         ImageView iv=(ImageView)findViewById(R.id.imageView1);
 6         Button start=(Button)findViewById(R.id.button1);
 7         Button end=(Button)findViewById(R.id.button2);
 8        iv.setBackgroundResource(R.drawable.animationlist);
 9        Button mybutton=(Button)findViewById(R.id.button3);
10    
11        mybutton.setOnClickListener(new OnClickListener() {
12         
13         @Override
14         public void onClick(View v) {
15             ImageView imgView=(ImageView)findViewById(R.id.imageView2);
16             // TODO 自動生成的方法存根
17             //動畫例項
18             Animation ani=AnimationUtils.loadAnimation(MainActivity.this, R.anim.twiani);
19             //開始動畫
20             imgView.startAnimation(ani);
21         }
22     });
23        //定義幀動畫
24        final AnimationDrawable ad=(AnimationDrawable)iv.getBackground();
25        //開始按鈕監聽
26        start.setOnClickListener(new OnClickListener() {
27         
28         @Override
29         public void onClick(View v) {
30             // TODO 自動生成的方法存根
31             //動畫開始
32             ad.start();
33         }
34     });
35        //結束按鈕監聽
36        end.setOnClickListener(new OnClickListener() {
37         
38         @Override
39         public void onClick(View v) {
40             // TODO 自動生成的方法存根
41             //動畫停止
42             ad.stop();
43         }
44     });
45     
46     }

3.補間動畫

補間動畫和幀動畫有很大的區別,補間動畫是對一張或者兩張圖片進行的變換,這些變換包括移動、大小、旋轉等,只需要第一幀和最後一幀的圖片。

(1)在anim檔案中建立一個set型別的xml文件。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <set xmlns:android="http://schemas.android.com/apk/res/android">
 3     <!-- 透明度-->
 4     <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="6000" >
 5         </alpha>
 6                <!-- 尺寸 --> 
 7      
 8      <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
 9            android:fromXScale="0.0"
10            android:toXScale="1.0"
11            android:fromYScale="0.0"
12            android:toYScale="1.0"
13            android:pivotX="50%"
14            android:pivotY="50%"
15            android:fillAfter="false"
16            android:duration="5000"></scale> 
17                     <!--  位置-->
18          <translate android:fromXDelta="30"
19                android:toXDelta="0"
20                android:fromYDelta="30"
21                android:toYDelta="0"
22                android:duration="10000"></translate>
23   <!-- 旋轉 -->
24   <rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
25       android:fromDegrees="0"
26       android:toDegrees="360"
27       android:pivotX="50%"
28       android:pivotY="50%"
29       android:duration="10000"/>
30 </set>

這裡通過<alpha>、<scale>、<translate>、<rotate>分別對影象的透明度、縮放、移動和旋轉進行控制。

(2)在後臺進行動畫的播放

 1     protected void onCreate(Bundle savedInstanceState) {
 2         super.onCreate(savedInstanceState);
 3         setContentView(R.layout.activity_main);
 4 
 5        Button mybutton=(Button)findViewById(R.id.button3);
 6    
 7        mybutton.setOnClickListener(new OnClickListener() {
 8         
 9         @Override
10         public void onClick(View v) {
11             ImageView imgView=(ImageView)findViewById(R.id.imageView2);
12             // TODO 自動生成的方法存根
13             //動畫例項
14             Animation ani=AnimationUtils.loadAnimation(MainActivity.this, R.anim.twiani);
15             //開始動畫
16             imgView.startAnimation(ani);
17         }
18     });
19 
20   
21 
22     }
23 
24