package tv.pps.pad.test; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; public class SliderNaviLeftBar extends LinearLayout { private static final int LINE_WIDTH=3;//左边选中效果的线的宽度 private static final int STEP_VALUE=30;//计算step的一个固定常量 private LinearLayout imageView_homepage; private Paint paint; private Rect curRectF; private Rect tarRectF; private Bitmap bmp; public SliderNaviLeftBar(Context context) { this(context, null); } public SliderNaviLeftBar(Context context, AttributeSet attrs) { super(context, attrs); setWillNotDraw(false); LayoutInflater.from(context).inflate(R.layout.leftbar, this, true); bmp=BitmapFactory.decodeResource(getResources(), R.drawable.pps_line); paint = new Paint(); paint.setAntiAlias(true); imageView_homepage = (LinearLayout)findViewById(R.id.left_imageview_homepage); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); int step = getHeight()/STEP_VALUE; if (curRectF == null) { curRectF = new Rect(imageView_homepage.getLeft(), imageView_homepage.getTop(),LINE_WIDTH, imageView_homepage.getBottom()); } if (tarRectF == null) { tarRectF = new Rect(imageView_homepage.getLeft(), imageView_homepage.getTop(),LINE_WIDTH, imageView_homepage.getBottom()); } if (Math.abs(curRectF.top - tarRectF.top) < step) { curRectF.top = tarRectF.top; curRectF.bottom = tarRectF.bottom; } if (curRectF.top > tarRectF.top) { curRectF.top -= step; curRectF.bottom -= step; invalidate(); } else if (curRectF.top < tarRectF.top) { curRectF.top += step; curRectF.bottom += step; invalidate(); } canvas.drawBitmap(bmp, null, curRectF, paint); } /** * 设置并启动动画 * @param view */ public void setAnimation(View view) { tarRectF.left = view.getLeft(); tarRectF.right = LINE_WIDTH; tarRectF.top = view.getTop(); tarRectF.bottom = view.getBottom(); invalidate(); } }