对这个项目感兴趣的可以看开源代码:https://github.com/Jude95/RollViewPager
对它的使用可以参考这个:http://www.2cto.com/kf/201605/506583.html
HintView
ShapeHintView
ColorHintView
IconHintView
TextHintView
//***********************************************************//
package lib.util.open.rollviewpage;
public interface HintView {
void initView(int length, int gravity);
void setCurrent(int current);
}
//********************************************************//
package lib.util.open.rollviewpage.hintview;import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import lib.util.open.rollviewpage.HintView;
public abstract class ShapeHintView extends LinearLayout implements HintView {
private ImageView[] mDots;
private int length = 0;
private int lastPosition = 0;
private Drawable dot_normal;
private Drawable dot_focus;
public ShapeHintView(Context context){
super(context);
}
public ShapeHintView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public abstract Drawable makeFocusDrawable();
public abstract Drawable makeNormalDrawable();
@Override
public void initView(int length, int gravity) {
removeAllViews();
lastPosition = 0;
setOrientation(HORIZONTAL);
switch (gravity) {
case 0:
setGravity(Gravity.LEFT| Gravity.CENTER_VERTICAL);
break;
case 1:
setGravity(Gravity.CENTER);
break;
case 2:
setGravity(Gravity.RIGHT| Gravity.CENTER_VERTICAL);
break;
}
this.length = length;
mDots = new ImageView[length];
dot_focus = makeFocusDrawable();
dot_normal = makeNormalDrawable();
for (int i = 0; i < length; i++) {
mDots[i]=new ImageView(getContext());
LayoutParams dotlp = new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
dotlp.setMargins(10, 0, 10, 0);
mDots[i].setLayoutParams(dotlp);
mDots[i].setBackgroundDrawable(dot_normal);
addView(mDots[i]);
}
setCurrent(0);
}
@Override
public void setCurrent(int current) {
if (current < 0 || current > length - 1) {
return;
}
mDots[lastPosition].setBackgroundDrawable(dot_normal);
mDots[current].setBackgroundDrawable(dot_focus);
lastPosition = current;
}
}
//***************************************************************************//
package lib.util.open.rollviewpage.hintview;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import lib.util.open.rollviewpage.Util;
/**
* Created by Mr.Jude on 2016/1/10.
*/
public class ColorPointHintView extends ShapeHintView {
private int focusColor;
private int normalColor;
public ColorPointHintView(Context context,int focusColor,int normalColor) {
super(context);
this.focusColor = focusColor;
this.normalColor = normalColor;
}
@Override
public Drawable makeFocusDrawable() {
GradientDrawable dot_focus = new GradientDrawable();
dot_focus.setColor(focusColor);
dot_focus.setCornerRadius(Util.dip2px(getContext(), 4));
dot_focus.setSize(Util.dip2px(getContext(), 8), Util.dip2px(getContext(), 8));
return dot_focus;
}
@Override
public Drawable makeNormalDrawable() {
GradientDrawable dot_normal = new GradientDrawable();
dot_normal.setColor(normalColor);
dot_normal.setCornerRadius(Util.dip2px(getContext(), 4));
dot_normal.setSize(Util.dip2px(getContext(), 8), Util.dip2px(getContext(), 8));
return dot_normal;
}
}
//************************************************************************************//
package lib.util.open.rollviewpage.hintview;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.DrawableRes;
import lib.util.open.rollviewpage.Util;
/**
* Created by Mr.Jude on 2016/1/10.
*/
public class IconHintView extends ShapeHintView {
private int focusResId;
private int normalResId;
private int size;
public IconHintView(Context context,@DrawableRes int focusResId,@DrawableRes int normalResId) {
this(context, focusResId, normalResId, Util.dip2px(context,32));
}
public IconHintView(Context context,@DrawableRes int focusResId,@DrawableRes int normalResId,int size) {
super(context);
this.focusResId = focusResId;
this.normalResId = normalResId;
this.size = size;
}
@Override
public Drawable makeFocusDrawable() {
Drawable drawable = getContext().getResources().getDrawable(focusResId);
if (size>0){
drawable = zoomDrawable(drawable,size,size);
}
return drawable;
}
@Override
public Drawable makeNormalDrawable() {
Drawable drawable = getContext().getResources().getDrawable(normalResId);
if (size>0){
drawable = zoomDrawable(drawable,size,size);
}
return drawable;
}
private Drawable zoomDrawable(Drawable drawable, int w, int h) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable);
Matrix matrix = new Matrix();
float scaleWidth = ((float) w / width);
float scaleHeight = ((float) h / height);
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,
matrix, true);
return new BitmapDrawable(null, newbmp);
}
private Bitmap drawableToBitmap(Drawable drawable) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
Bitmap bitmap = Bitmap.createBitmap(width, height, config);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
return bitmap;
}
}
//*********************************************************************************//package lib.util.open.rollviewpage.hintview;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.DrawableRes;
import lib.util.open.rollviewpage.Util;
/**
* Created by Mr.Jude on 2016/1/10.
*/
public class IconHintView extends ShapeHintView {
private int focusResId;
private int normalResId;
private int size;
public IconHintView(Context context,@DrawableRes int focusResId,@DrawableRes int normalResId) {
this(context, focusResId, normalResId, Util.dip2px(context,32));
}
public IconHintView(Context context,@DrawableRes int focusResId,@DrawableRes int normalResId,int size) {
super(context);
this.focusResId = focusResId;
this.normalResId = normalResId;
this.size = size;
}
@Override
public Drawable makeFocusDrawable() {
Drawable drawable = getContext().getResources().getDrawable(focusResId);
if (size>0){
drawable = zoomDrawable(drawable,size,size);
}
return drawable;
}
@Override
public Drawable makeNormalDrawable() {
Drawable drawable = getContext().getResources().getDrawable(normalResId);
if (size>0){
drawable = zoomDrawable(drawable,size,size);
}
return drawable;
}
private Drawable zoomDrawable(Drawable drawable, int w, int h) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable);
Matrix matrix = new Matrix();
float scaleWidth = ((float) w / width);
float scaleHeight = ((float) h / height);
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,
matrix, true);
return new BitmapDrawable(null, newbmp);
}
private Bitmap drawableToBitmap(Drawable drawable) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
Bitmap bitmap = Bitmap.createBitmap(width, height, config);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
return bitmap;
}
}
//******************************************************************************//package lib.util.open.rollviewpage.hintview;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.TextView;
import lib.util.open.rollviewpage.HintView;
public class TextHintView extends TextView implements HintView {
private int length;
public TextHintView(Context context){
super(context);
}
public TextHintView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void initView(int length, int gravity) {
this.length = length;
setTextColor(Color.WHITE);
switch (gravity) {
case 0:
setGravity(Gravity.LEFT| Gravity.CENTER_VERTICAL);
break;
case 1:
setGravity(Gravity.CENTER);
break;
case 2:
setGravity(Gravity.RIGHT| Gravity.CENTER_VERTICAL);
break;
}
setCurrent(0);
}
@Override
public void setCurrent(int current) {
setText(current+1+"/"+ length);
}
}