效果么就是每隔能秒钟切换一张广告图片,下面有圆点....直接上代码
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; } @Override public 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(); } } @Override public void showNext() { super.showNext(); changeDot(); } @Override public 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(); } @Override public boolean onDown(MotionEvent e) {return false;} @Override public void onShowPress(MotionEvent e) {} @Override public boolean onSingleTapUp(MotionEvent e) {return false;} @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) { return false; } @Override public void onLongPress(MotionEvent e) {} @Override public 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); } @Override public boolean onTouchEvent(MotionEvent event) { gestureDetector.onTouchEvent(event); return true; } @Override public boolean dispatchTouchEvent(MotionEvent ev) { this.onTouchEvent(ev); return true; } }