Android自定义控件之广告视图

来源:互联网 发布:淘宝吉光片羽家怎么样 编辑:程序博客网 时间:2024/05/17 23:58

效果么就是每隔能秒钟切换一张广告图片,下面有圆点....直接上代码

public abstract class Adapter {public abstract int getCount();/** * 页面数组 * @return */public View[] getPages(){int count=getCount();View[] views=new View[count];for (int i = 0; i < count; i++) {views[i]=getPage(i);}return views;}/** * 页面 * @param position * @return */public abstract View getPage(int position);/** * 已选中背景视图 * @return */public abstract View getCheckedBg();/** * 获得屏幕宽度 * @param context * @return */public int getScreenWidth(Context context){return context.getResources().getDisplayMetrics().widthPixels;}/** * 获得屏幕高度 * @param context * @return */public int getScreenHeight(Context context){return context.getResources().getDisplayMetrics().heightPixels;}/** * DP转PIX * @param context * @param dp * @return */public int getFixPx(Context context,int dp){float scale=context.getResources().getDisplayMetrics().density;return (int)(scale*dp+0.5);}}

/** * <h1>广告组件适配器</h1><p> * </p> * @author: linxcool.hu */public abstract class GangedAdvertAdaper extends Adapter {protected Drawable dotNormal;protected Drawable dotChecked;public Drawable getDotNormal(Context context) {if(dotNormal==null)dotNormal=createPonit(context,Color.rgb(163, 163, 163));return dotNormal;}public Drawable getDotChecked(Context context) {if(dotChecked==null)dotChecked=createPonit(context,Color.rgb(238, 238, 238));return dotChecked;}public View[] getDots(Context context){View[] views=new View[getCount()];for (int i = 0; i < getCount(); i++) {views[i]=getDot(context, i);}return views;}public View getDot(Context context,int position){ImageView iv=new ImageView(context);iv.setBackgroundDrawable(getDotNormal(context));LinearLayout.LayoutParams pointParams=new LinearLayout.LayoutParams(getPointSize(context), getPointSize(context));pointParams.setMargins(getFixPx(context, 3), 0, getFixPx(context, 3), 0);iv.setLayoutParams(pointParams);return iv;}public int getWidth(Context context){return getScreenWidth(context);}public int getHeight(Context context){return getFixPx(context, 140);}public int getFootHeight(Context context){return getFixPx(context, 20);}public int getPointSize(Context context){return getFixPx(context, 7);}public Drawable createPonit(Context context,int color){int size=getPointSize(context);Bitmap bitmap=Bitmap.createBitmap(size, size,Config.ARGB_8888);Drawable drawable=new BitmapDrawable(bitmap);Canvas canvas=new Canvas(bitmap);Paint paint= new Paint();paint.setColor(color);paint.setAntiAlias(true);canvas.drawCircle(size*1.0f/2, size*1.0f/2, size*1.0f/2, paint);drawable.draw(canvas);//canvas.restore();return drawable;}@Overridepublic View getCheckedBg() {return null;}}

/** * 广告视图 * @author: linxcool.hu */public class GangedAdvert extends FrameLayout implements OnGestureListener{private GestureDetector gestureDetector;private ViewFlipper viewFlipper;private GangedAdvertAdaper adaper;private LinearLayout pointsLayout;private View[] dotViews;//private TextView tv;private int lastIndex;private int currentIndex;public GangedAdvertAdaper getAdaper() {return adaper;}public GangedAdvert(Context context) {super(context);}public GangedAdvert(Context context,GangedAdvertAdaper adaper) {super(context);this.adaper=adaper;initResource();initPages();initPoints();viewFlipper.startFlipping();}protected void initResource(){dotViews=adaper.getDots(getContext());gestureDetector=new GestureDetector(getContext(), this);currentIndex=0;dotViews[currentIndex].setBackgroundDrawable(adaper.getDotChecked(getContext()));}protected void initPoints(){LinearLayout layout=new LinearLayout(getContext());layout.setGravity(Gravity.BOTTOM);LayoutParams params=new LayoutParams(LayoutParams.FILL_PARENT,adaper.getHeight(getContext()));this.addView(layout,params);pointsLayout=new LinearLayout(getContext());//pointsLayout.setBackgroundColor(Color.argb(250, 212, 212, 212));pointsLayout.setOrientation(LinearLayout.HORIZONTAL);pointsLayout.setGravity(Gravity.CENTER);LayoutParams ptParams=new LayoutParams(LayoutParams.FILL_PARENT,adaper.getFootHeight(getContext()));ptParams.setMargins(0, 0, 0, 0);layout.addView(pointsLayout,ptParams);for (int i = 0; i < adaper.getCount(); i++) {pointsLayout.addView(dotViews[i]);}}protected Drawable createPonit(int color){int size=adaper.getPointSize(getContext());Bitmap bitmap=Bitmap.createBitmap(size, size,Config.ARGB_8888);Drawable drawable=new BitmapDrawable(bitmap);Canvas canvas=new Canvas(bitmap);Paint paint= new Paint();paint.setColor(color);canvas.drawCircle(size*1.0f/2, size*1.0f/2, size*1.0f/2, paint);drawable.draw(canvas);//canvas.restore();return drawable;}protected void initPages(){viewFlipper=new ViewFlipper(getContext()){protected void onDetachedFromWindow() {try {super.onDetachedFromWindow(); }catch (Exception e){stopFlipping(); }}@Overridepublic void showNext() {super.showNext();changeDot();}@Overridepublic void showPrevious() {super.showPrevious();changeDot();}private void changeDot(){lastIndex=currentIndex;currentIndex=getCurrentView().getId();dotViews[currentIndex].setBackgroundDrawable(adaper.getDotChecked(getContext()));dotViews[lastIndex].setBackgroundDrawable(adaper.getDotNormal(getContext()));}};viewFlipper.setLongClickable(true);viewFlipper.setFlipInterval(3000);LayoutParams vfParams=new LayoutParams(adaper.getWidth(getContext()),adaper.getHeight(getContext()));this.addView(viewFlipper,vfParams);for (int i = 0; i < adaper.getCount(); i++) {View c=adaper.getPage(i);c.setId(i);viewFlipper.addView(c);}setLeftAnimation();}@Overridepublic boolean onDown(MotionEvent e) {return false;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {return false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {return false;}@Overridepublic void onLongPress(MotionEvent e) {}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {float x=e1.getX() - e2.getX();/*float y=e1.getY() - e2.getY();if(Math.abs(y)>Math.abs(x) || y> adaper.getHeight(getContext())/4)return true;*/if (x > 5) { viewFlipper.showNext();}else if(x < -5) {  setRightAnimation();viewFlipper.showPrevious();setLeftAnimation();}return true;}/** * 设置向左滑动动画 */public void setLeftAnimation(){int width=adaper.getWidth(getContext());Animation inAnimation=new TranslateAnimation(width, 0, 0, 0);inAnimation.setDuration(200);viewFlipper.setInAnimation(inAnimation);Animation outAnimation=new TranslateAnimation(0,-width, 0, 0);outAnimation.setDuration(200);viewFlipper.setOutAnimation(outAnimation);}/** * 设置向右滑动动画 */public void setRightAnimation(){int width=adaper.getWidth(getContext());Animation inAnimation=new TranslateAnimation(-width, 0, 0, 0);inAnimation.setDuration(200);viewFlipper.setInAnimation(inAnimation);Animation outAnimation=new TranslateAnimation(0,width, 0, 0);outAnimation.setDuration(200);viewFlipper.setOutAnimation(outAnimation);}@Overridepublic boolean onTouchEvent(MotionEvent event) {gestureDetector.onTouchEvent(event);return true;}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {this.onTouchEvent(ev);return true;}}


原创粉丝点击