效果么就是每隔能秒钟切换一张广告图片,下面有圆点....直接上代码
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;
}
}