http://www.oschina.net/question/195301_31378?from=mail-notify
本文转载自:eoeandroid.com
01 | package wht.android.loading; |
02 |
03 | import android.content.Context; |
04 | import android.graphics.Canvas; |
05 | import android.util.AttributeSet; |
06 | import android.widget.ImageView; |
07 |
08 | public class LoadingView extends ImageView implements Runnable |
09 | { |
10 | private boolean isStop = false ; |
11 | |
12 | private int [] imageIds; |
13 | private int index = 0 ; |
14 | private int length = 1 ; |
15 | |
16 | public LoadingView(Context context) |
17 | { |
18 | this (context, null ); |
19 | } |
20 |
21 | public LoadingView(Context context, AttributeSet attrs) |
22 | { |
23 | super (context, attrs); |
24 | } |
25 | |
26 | public void setImageIds( int [] imageId) |
27 | { |
28 | this .imageIds = imageId; |
29 | if (imageIds != null && imageIds.length > 0 ) |
30 | { |
31 | length = imageIds.length; |
32 | } |
33 | } |
34 | |
35 | @Override |
36 | protected void onDetachedFromWindow() |
37 | { |
38 | // TODO Auto-generated method stub |
39 | super .onDetachedFromWindow(); |
40 | isStop = true ; |
41 | } |
42 |
43 | @Override |
44 | protected void onDraw(Canvas canvas) |
45 | { |
46 | // TODO Auto-generated method stub |
47 | super .onDraw(canvas); |
48 | if (imageIds != null && imageIds.length > 0 ) |
49 | { |
50 | this .setImageResource(imageIds[index]); |
51 | } |
52 | } |
53 |
54 | @Override |
55 | public void run() |
56 | { |
57 | while (!isStop) |
58 | { |
59 | index = ++index % length; |
60 | postInvalidate(); |
61 | try |
62 | { |
63 | Thread.sleep( 400 ); |
64 | } |
65 | catch (InterruptedException e) |
66 | { |
67 | e.printStackTrace(); |
68 | } |
69 | } |
70 | } |
71 | |
72 | public void startAnim() |
73 | { |
74 | new Thread( this ).start(); |
75 | } |
76 |
77 | } |
01 | package wht.android.loading; |
02 |
03 | import android.app.Activity; |
04 | import android.os.Bundle; |
05 |
06 | public class MainActivity extends Activity |
07 | { |
08 | |
09 | private LoadingView main_imageview; |
10 | |
11 | @Override |
12 | public void onCreate(Bundle savedInstanceState) |
13 | { |
14 | super .onCreate(savedInstanceState); |
15 | setContentView(R.layout.main); |
16 | main_imageview = (LoadingView)findViewById(R.id.main_imageview); |
17 | initLoadingImages(); |
18 | |
19 | new Thread() |
20 | { |
21 | @Override |
22 | public void run() |
23 | { |
24 | main_imageview.startAnim(); |
25 | } |
26 | }.start(); |
27 | |
28 | } |
29 | |
30 | private void initLoadingImages() |
31 | { |
32 | int [] imageIds = new int [ 6 ]; |
33 | imageIds[ 0 ] = R.drawable.loader_frame_1; |
34 | imageIds[ 1 ] = R.drawable.loader_frame_2; |
35 | imageIds[ 2 ] = R.drawable.loader_frame_3; |
36 | imageIds[ 3 ] = R.drawable.loader_frame_4; |
37 | imageIds[ 4 ] = R.drawable.loader_frame_5; |
38 | imageIds[ 5 ] = R.drawable.loader_frame_6; |
39 | |
40 | main_imageview.setImageIds(imageIds); |
41 | } |
42 | } |
01 | <? xml version = "1.0" encoding = "utf-8" ?> |
02 | < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" |
03 | android:orientation = "vertical" android:layout_width = "fill_parent" |
04 | android:layout_height = "fill_parent" android:background = "#e1e1e1" > |
05 | < wht.android.loading.LoadingView |
06 | android:layout_gravity = "center_horizontal" android:layout_height = "wrap_content" |
07 | android:id = "@+id/main_imageview" android:src = "@drawable/loader_frame_1" |
08 | android:layout_marginTop = "190dp" android:layout_width = "wrap_content" |
09 | ></ wht.android.loading.LoadingView > |
10 |
11 | < TextView |
12 | android:layout_width = "wrap_content" |
13 | android:layout_height = "wrap_content" |
14 | android:text = "启动中..." |
15 | android:layout_marginTop = "10dip" |
16 | android:textColor = "#666666" |
17 | android:layout_gravity = "center_horizontal" |
18 | android:textSize = "20sp" |
19 | /> |
20 | </ LinearLayout > |