android通过绘制遮罩实现逐行显示信息

    技术2025-12-24  6

    前一篇讲到通过开多个线程来启动每个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;     } }

    最新回复(0)