前一篇讲到通过开多个线程来启动每个view 的动画来实现页面的逐条刷新,开销很大。这里给出了一个比较合理的方案,就是在页面上生成一个遮罩,通过遮罩的下移动画来实现内容的逐步刷新。
主画面类:
package com.drawmask; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.view.animation.Animation.AnimationListener; import android.widget.LinearLayout; import android.widget.RelativeLayout; public class DrawMask extends Activity implements OnClickListener { private LinearLayout reload; private View mask; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取屏幕宽高 DisplayMetrics dm = new DisplayMetrics(); dm = getApplicationContext().getResources().getDisplayMetrics(); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels; RelativeLayout parent = (RelativeLayout) findViewById(R.id.RelativeLayout01); // 新建遮罩 mask = new Mask(this, screenWidth, screenHeight); parent.addView(mask); startOpenAnimation(); // 点击屏幕重启遮罩动画 reload = (LinearLayout) findViewById(R.id.reload); reload.setOnClickListener(this); } private void startOpenAnimation() { TranslateAnimation ta = new TranslateAnimation(0, 0, 0, 500); ta.setDuration(2000); ta.setAnimationListener(new AnimationListener() { @Override public void onAnimationEnd(Animation animation) { mask.setVisibility(View.GONE); } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationStart(Animation animation) { } }); mask.startAnimation(ta); } @Override public void onClick(View v) { startOpenAnimation(); } }
遮罩类:
package com.drawmask; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Shader; import android.view.View; public class Mask extends View{ private int width, higth; @Override protected void onDraw(Canvas canvas) { // 生成可以绘制透明渐变的矩形View的画笔 Paint paint = new Paint(); Shader mShader=new LinearGradient(0,0,0,50, new int[]{Color.argb(0, 255, 255, 255),Color.WHITE}, null,Shader.TileMode.CLAMP); paint.setShader(mShader); // 以绘制透明渐变的矩形View Rect rect = new Rect(); rect.set(0, 0, width, higth); canvas.drawRect(rect, paint); } public Mask(Context context) { super(context); // TODO Auto-generated constructor stub } public Mask(Context context, int width, int higth) { super(context); this.higth = higth; this.width = width; } }
