一分钟实现轮播图
来源:互联网 发布:linux cp几个文件 编辑:程序博客网 时间:2024/05/22 01:41
package com.yijin.timetrade.base;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.RectF;import android.os.CountDownTimer;import android.os.Handler;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import java.util.ArrayList;import java.util.List;/** * 轮播图抽象类 */public abstract class BaseBanner extends View { private List<? extends Object> imgbitm; private ArrayList<String> imgbitm1; private boolean A = true; private ArrayList<Bitmap> Bitmap; public ArrayList<android.graphics.Bitmap> getBitmap() { return Bitmap; } private int posin = 0; private Paint paint; private Rect rect, rects; private Rect laft, regiht; private Bitmap map = null; private boolean l = false, r = false; private boolean aBoolean = true; private int getPosin() { if (Bitmap != null) if (posin >= Bitmap.size()) { posin = 0; } else if (posin < 0) { posin = Bitmap.size() - 1; } return posin; } private int bbq = 1; protected Context context; public BaseBanner(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { if (Bitmap != null && Bitmap.size() != 0 && Bitmap.get(0) != null) { if (posin >= Bitmap.size()) { posin = 0; } else if (posin < 0) { posin = Bitmap.size() - 1; } if (A) { A = false; paint = new Paint(); paint.setStrokeJoin(Paint.Join.ROUND); paint.setAntiAlias(true); paint.setDither(true); rects = new Rect(0, 0, getWidth(), getHeight()); rect = new Rect(0, 0, getWidth(), getHeight()); laft = new Rect(0 - getWidth(), 0, 0, getHeight()); regiht = new Rect(0 - getWidth(), 0, 0, getHeight()); canvas.drawBitmap(Bitmap.get(posin), rects, rect, paint); } else { if (posin >= Bitmap.size()) { posin = 0; } else if (posin < 0) { posin = Bitmap.size() - 1; } canvas.drawBitmap(Bitmap.get(posin), rects, rect, paint); if (r) if (posin >= Bitmap.size() - 1) canvas.drawBitmap(Bitmap.get(0), rects, regiht, paint); else canvas.drawBitmap(Bitmap.get(posin + 1), rects, regiht, paint); if (l) if (posin <= 0) canvas.drawBitmap(Bitmap.get(Bitmap.size() - 1), rects, laft, paint); else canvas.drawBitmap(Bitmap.get(posin - 1), rects, laft, paint); } DrawPageNumber(Bitmap.size(), posin, canvas); } super.onDraw(canvas); } public BaseBanner setabcLunBo(ArrayList<Bitmap> Bitmap, List<? extends Object> imgbitm) {//参数二为对应的网址 if (Bitmap == null) A = false; this.Bitmap = Bitmap; this.imgbitm = imgbitm; if (Bitmap.size() >= 2 && aBoolean) { handler.sendEmptyMessageDelayed(0, getTime());//启动handler,实现4秒定时循环执行 aBoolean = false; } invalidate(); return this; } private JISUAN j; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: j = new JISUAN(); j.ACTION_DOWN((int) event.getX()); System.out.println(event.getX() + "-------------"); break; case MotionEvent.ACTION_MOVE: isChange = false; int aa = j.ACTION_MOVE((int) event.getX()); if (aa < 0) { laft = new Rect(0 - getWidth() - aa, 0, 0 - aa, getHeight()); l = true; r = false; } else { r = true; l = false; regiht = new Rect(getWidth() - aa, 0, 2 * getWidth() - aa, getHeight()); } rect = new Rect(0 - aa, 0, getWidth() - aa, getHeight()); invalidate(); break; case MotionEvent.ACTION_UP: l = false; r = false; isChange = true;// laft = new Rect(0 - getWidth(), 0, 0, getHeight());// regiht = new Rect(0 - getWidth(), 0, 0, getHeight()); rect = new Rect(0, 0, getWidth(), getHeight()); switch (j.ACTION_UP((int) event.getX())) { case -1: posin--; break; case 0: break; case 1: posin++; break; default: break; } if (Bitmap != null && -50 <= j.ACTION_MOVE((int) event.getX()) && j.ACTION_MOVE((int) event.getX()) <= 50) {//点击时跳转,移动时不跳转 OnClickItemImage(getPosin(), imgbitm); } break; } invalidate(); return true; } protected CountDownTimer cdt = new CountDownTimer(100, 20) { @Override public void onTick(long millisUntilFinished) { r = true; l = false; bbq++; int aa = getWidth() / 10; regiht = new Rect(getWidth() - aa * bbq, 0, 2 * getWidth() - aa * bbq, getHeight()); rect = new Rect(0 - aa * bbq, 0, getWidth() - aa * bbq, getHeight()); invalidate(); } @Override public void onFinish() { posin++; bbq = 1; rect = new Rect(0, 0, getWidth(), getHeight()); l = false; r = false; invalidate(); } }; boolean isChange = true; private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { if (isChange && Bitmap.size() > 1) { //逻辑处理 cdt.start(); } handler.sendEmptyMessageDelayed(0, getTime());//3秒后再次执行 } }; class JISUAN { private int point1, point2, point3; public int getPoint1() { return point1; } public int getPoint2() { return point2; } public int getPoint3() { return point3; } public void ACTION_DOWN(int point) { this.point1 = point; } public int ACTION_MOVE(int point2) { this.point2 = point2; return jisuan(this.point1, this.point2); } public int ACTION_UP(int point3) { this.point3 = point3; if (jisuan(this.point1, this.point3) < -getWidth() / 3) { return -1; } else if (jisuan(this.point1, this.point3) > getWidth() / 3) { return 1; } else { return 0; } } public int jisuan(int point11, int point22) { System.out.println("point11+" + point11 + "point22+" + point22); return point11 - point22; } } /** * 点击事件处理 * @param pson * @param objects */ protected abstract void OnClickItemImage(int pson, List<? extends Object> objects); /** * 可扩展方法里面可以添加你的自定义操作 * @param size * @param pson * @param canvas */ protected abstract void DrawPageNumber(int size, int pson, Canvas canvas); /** * 单位毫秒 * * @return */ protected abstract int getTime(); /** * 添加底部小点 * @param size * @param pson * @param canvas */ protected void addButPoint(int size, int pson, Canvas canvas){ int buttton = (int) canvas.getHeight() - 20; int width = (int) (canvas.getWidth() /3)/ (size+1); int jiange = width / (size+1); Paint pan = new Paint(); pan.setColor(Color.BLUE); Paint pan2 = new Paint(); pan2.setColor(Color.WHITE); for (int i = 0; i < size; i++) { RectF r2 = new RectF(); //RectF对象 r2.left = canvas.getWidth()/3+jiange*(i+1)+ width*i; //左边 r2.top = buttton-10; //上边 r2.right = canvas.getWidth()/3+jiange*(i+1)+ width*(i+1);; //右边 r2.bottom = buttton; if (i != pson) canvas.drawRoundRect(r2, 10, 10, pan2); else canvas.drawRoundRect(r2, 10, 10, pan); } }}/**************************************快速集成区,直接继承BaseBanner即可集成**************************************************************************/package com.yijin.timetrade.viewmodel;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import com.yijin.timetrade.R;import com.yijin.timetrade.base.BaseBanner;import com.yijin.timetrade.utils.NativeUtils;import java.util.List;/** * Created by Administrator on 2017/12/4. */public class Banner extends BaseBanner { public Banner(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void OnClickItemImage(int pson, List<?> objects) {// NativeUtils.get(context, objects.get(pson).toString());//点击事件处理区 } @Override public void DrawPageNumber(int size, int pson, Canvas canvas) { /** * 添加底部小点 */ addButPoint(size, pson, canvas); } /** * 设置轮播速度,单位毫秒 * @return */ @Override public int getTime() { return 3000; }}/*****************************************************************使用方法Banner banner=findViewById(R.id.banner);//初始化ArrayList<Bitmap> bitmaps=new ArrayList<>();ArrayList<String> url=new ArrayList<>();banner.setabcLunBo(bitmaps,url);//添加数据源
阅读全文
0 0
- 一分钟实现轮播图
- 一分钟实现FragmentTabhost
- 一分钟实现分布式锁
- 一分钟实现分布式锁
- 一分钟实现分布式锁
- 一分钟实现分布式锁
- 一分钟掌握FactoryBean的实现
- 如何一分钟实现滑动菜单特效
- Timer定时器实现一分钟倒计时功能
- 一分钟实现动态模糊效果(毛玻璃)
- 一分钟了解“Matlab实现tophat变换”
- 一分钟
- [一分钟学会系列之三]一分钟学会实现透明窗口度效果(待续)
- 一分钟学会实现Suggest功能的AJAX样例
- 冰箱压缩机一分钟测试系统设计与实现
- 一分钟学会实现Suggest功能的AJAX样例
- 一分钟学会实现Suggest功能的AJAX样例
- 一分钟学会实现Suggest功能的AJAX样例
- 手动实现memcpy涉及内存重叠与不重叠情况
- 自定义View设置padding和wrap_content无效的解决办法
- C++ string中的几个小陷阱
- MySQL与JAVA实现学生管理系统
- Linux+libusb开发用户USB无驱通讯
- 一分钟实现轮播图
- 自学JavaScript语法的收获
- Arrays.asList().add()异常
- String类(二)
- Filezilla server配置FTP服务器中的各种问题与解决方法
- string类的实现
- lua垃圾回收机制
- 数据结构线性表
- 如何从MongoDB迁移到MySQL?这有现成经验!