『壹』 Android-自定义轮播Banner-Viewpaper2实现+贪吃蛇原点指示器+触摸暂停轮播处理
在构建Android自定义轮播Banner的进程中,我们通过整合Viewpaper2,实现了一款更为完善的轮播组件。此组件已经集成至github仓库,以便开发者探索和使用。
在实现过程中,我们关注了细节优化和内存管理,尽管还有待完善的细节和潜在的bug,但整体效果已接近预期。用户界面的展示效果显著提升,使得轮播体验更流畅、更直观。
具体实现步骤包括:
1. 继承ViewGroup,以便为轮播Banner添加圆角效果。通过自定义测量和布局逻辑,确保内嵌的Viewpaper2组件内容在边框内正确排列,最终通过重写dispatchDraw方法,实现圆角覆盖效果。
2. 指示器的绘制相对简单,关键在于准确定位和实现动态变化效果。结合ViewPager2的OnPageChangeCallback回调,我们能够精准计算当前页面位置,动态调整指示器颜色和贪吃蛇效果,确保视觉体验连贯且引人入胜。
3. 为了响应触摸事件,停止轮播,我们利用了Viewpaper2提供的onPageScrollStateChanged回调方法。值得注意的是,外部的setTouchEvent事件对Viewpaper2无效,因此我们需直接通过回调处理触摸事件,避免了不必要的继承和事件重写。
整个实现过程中,我们关注了性能、内存和显示问题,力求提供一个功能丰富、体验优化的轮播组件。建议在性能和内存优化上进一步完善,以提升用户体验。同时,考虑将此组件封装成开源项目,与开发者社区共享,共同促进移动应用开发的进步。
总结,此轮播Banner组件已具备基础功能,满足项目需求,适用于多种场景。未来,我们计划继续优化和完善此组件库,增加刷新功能,并进一步简化工程模板。在此过程中,我们期待与开发者社区共同探索和创新,共同进步。
最后,作为开发者,我们应持续关注技术进步,不断优化和创新,为用户提供更优质的移动应用体验。在忙碌的准备面试期间,我们仍然保持对技术的热情和追求,希望与开发者朋友们共勉,共同成长。
这是我以前写过的一个,样式你改一下就OK了
<div class="fbanner widget3924">
<div id="i_focus">
<div id="i_focus_pic">
<ul id="i_focus_piclist">
<li style="display: none;">
<a href="" target="_blank" style="background: url(/templates/runlinjinguan/images/banner1.jpg) center 0 no-repeat;">
</a>
</li>
<li style="display: list-item;">
<a href="" target="_blank" style="background: url(/templates/runlinjinguan/images/banner4.jpg) center 0 no-repeat;">
</a>
</li>
<li style="display: none;">
<a href="" target="_blank" style="background: url(/templates/runlinjinguan/images/banner3.jpg) center 0 no-repeat;">
</a>
</li>
<li style="display: none;">
<a href="" target="_blank" style="background: url(/templates/runlinjinguan/images/banner2.jpg) center 0 no-repeat;">
</a>
</li>
</ul>
<div id="i_focus_opdiv">
</div>
<ul id="i_focus_btn">
<li id="p0" class="">
<span>
</span>
</li>
<li id="p0" class="i_cur">
<span>
</span>
</li>
<li id="p0" class="">
<span>
</span>
</li>
<li id="p0" class="">
<span>
</span>
</li>
</ul>
</div>
</div>
<script type="text/javascript" src="/templates/runlinjinguan/js/flash.js"></script>
<script type="text/javascript">
$("#i_focus_btn").find("li").eq(0).addClass("i_cur");
</script>
</div>
引用的js文件
// JavaScript Document
//flash js
$(document).ready(function () {
var i_curIndex = 0;
var beauBeauSlide; //函数对象
var i_curID = 0; //取得鼠标下方的对象ID
var pictureID = 0; //索引ID
$("#i_focus_piclist li").eq(0).show(); //默认
autoScroll();
$("#i_focus_btn li").hover(function (e) {
StopScrolll();
$("#i_focus_btn li").removeClass("i_cur") //所有的li去掉当前的样式加上正常的样式
$(this).addClass("i_cur"); //而本身则加上当前的样式去掉正常的样式
i_curID = $(this).attr("id"); //取当前元素的ID
pictureID = $("#i_focus_btn li").index(this);// i_curID.substring(i_curID.length - 1); //取最后一个字符
$("#i_focus_piclist li").eq(pictureID).fadeIn("slow"); //本身显示
$("#i_focus_piclist li").not($("#i_focus_piclist li")[pictureID]).hide(); //除了自身别的全部隐藏
$("#i_focus_tx li").hide();
$("#i_focus_tx li").eq(pictureID).show();
},
function () {
//当鼠标离开对象的时候获得当前的对象的ID以便能在启动自动时与其同步
i_curID = $(this).attr("id"); //取当前元素的ID
pictureID = i_curID.substring(i_curID.length - 1); //取最后一个字符
i_curIndex = pictureID;
autoScroll();
});
//自动滚动
function autoScroll() {
var myNubli = $("#i_focus_btn li").size();
if (myNubli > 1) {
$("#i_focus_btn li:last").removeClass("i_cur");
$("#i_focus_tx li:last").hide();
$("#i_focus_btn li").eq(i_curIndex).addClass("i_cur");
$("#i_focus_btn li").eq(i_curIndex - 1).removeClass("i_cur");
$("#i_focus_tx li").eq(i_curIndex).show();
$("#i_focus_tx li").eq(i_curIndex - 1).hide();
$("#i_focus_piclist li").eq(i_curIndex).fadeIn("slow");
$("#i_focus_piclist li").eq(i_curIndex - 1).hide();
i_curIndex++;
i_curIndex = i_curIndex >= myNubli ? 0 : i_curIndex;
beauBeauSlide = setTimeout(autoScroll, 5000);
}
}
function StopScrolll() //当鼠标移动到对象上面的时候停止自动滚动
{
clearTimeout(beauBeauSlide);
}
});
//第二个渐隐幻灯开始
var defaultOpts = {
interval: 3000,
fadeInTime: 800,
fadeOutTime: 500
};
var _titles = $("ul.slide-txt li");
var _titles_bg = $("ul.op li");
var _bodies = $("ul.slide-pic li");
var _count = _titles.length;
var _current = 0;
var _intervalID = null;
var stop = function () {
window.clearInterval(_intervalID);
};
var slide = function (opts) {
if (opts) {
_current = opts.current || 0;
} else {
_current = (_current >= (_count - 1)) ? 0 : (++_current);
};
_bodies.filter(":visible").fadeOut(defaultOpts.fadeOutTime,
function () {
_bodies.eq(_current).fadeIn(defaultOpts.fadeInTime);
_bodies.removeClass("cur").eq(_current).addClass("cur");
});
_titles.removeClass("cur").eq(_current).addClass("cur");
_titles_bg.removeClass("cur").eq(_current).addClass("cur");
}; //endof slide
var go = function () {
stop();
_intervalID = window.setInterval(function () {
slide();
},
defaultOpts.interval);
}; //endof go
var itemMouseOver = function (target, items) {
stop();
var i = $.inArray(target, items);
slide({
current: i
});
}; //endof itemMouseOver
_titles.hover(function () {
if ($(this).attr('class') != 'cur') {
itemMouseOver(this, _titles);
} else {
stop();
}
},
go);
//_titles_bg.hover(function() { itemMouseOver(this, _titles_bg); }, go);
_bodies.hover(stop, go);
go();
var slideX = {
_this: $('.catalog .imgbox'),
_btnLeft: $('.catalog .left'),
_btnRight: $('.catalog .right'),
init: function () {
slideX._btnLeft.click(slideX.slideLeft);
slideX._btnRight.click(slideX.slideRight);
},
slideLeft: function () {
slideX._btnLeft.unbind('click', slideX.slideLeft);
for (i = 0; i < 2; i++) {
slideX._this.find('li:last').prependTo(slideX._this);
}
slideX._this.css('marginLeft', -224);
slideX._this.animate({
'marginLeft': 0
},
500,
function () {
slideX._btnLeft.bind('click', slideX.slideLeft);
});
return false;
},
slideRight: function () {
slideX._btnRight.unbind('click', slideX.slideRight);
slideX._this.animate({
'marginLeft': -224
},
500,
function () {
slideX._this.css('marginLeft', '0');
for (i = 0; i < 2; i++) {
slideX._this.find('li:first').appendTo(slideX._this)
}
slideX._btnRight.bind('click', slideX.slideRight);
});
return false;
}
}
$(document).ready(function () {
slideX.init();
})
$(document).ready(function () {
var newTime = new Date();
var newTime = newTime.getTime();
var $imgTmp = $('#topromotion').find('img:first');
var osrc = $imgTmp.attr('src');
$imgTmp.attr('src', osrc + '?' + newTime);
});
希望对你有帮助!
『叁』 请问 这个轮播图代码 怎么多添加几个图片几个小圆点。代码如下:
请问一下,有大佬知道上方的代码还应该加什么代码实现自动播放四张图片
『肆』 求人现在写一段简单的首页全屏轮播的html代码,写好有钱
自己加五张图片,然后:
<!doctype html>
<html>
<head>
<!--声明当前页面的编码集:charset=gbk,gb2312(中文编码),utf-8国际编码-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!--当前页面的三要素-->
<title>腾讯课堂-专业的在线教育平台</title>
<meta name="Keywords" content="关键词,关键词">
<meta name="description" content="">
<!--css,js-->
<style type="text/css">
*{margin:0;padding:0;}
body{font-size:12px;font-family:"微软雅黑";color:#666;height:1500px;}
img{border:0;}
/*banner start*/
.banner{width:100%;height:350px;margin-top:px;}
.banner .b_adv{width:1200px;height:50px;margin:0 auto;position:relative;}
.banner .b_adv a{position:absolute;top:0;left:220px;}
.banner .b_bg{height:300px;background:#4a4d9c;z-index:1;}
.banner .b_bg .b_con{width:1200px;height:300px;margin:0 auto;
position:relative;z-index:2;
}
/*focus start*/
.banner .b_bg .b_con .focus{width:760px;height:300px;
position:absolute;left:220px;top:0;z-index:3;overflow:hidden;}
.banner .b_bg .b_con .focus .f_pic{position:relative;}
.banner .b_bg .b_con .focus .f_pic li{list-style:none;}
.banner .b_bg .b_con .focus .f_btn{height:24px;
position:absolute;bottom:10px;left:330px;
/*left:50%;margin-left:-70px;*/
}
.banner .b_bg .b_con .focus .f_btn ul{background:#000;display:inline-block;padding:7px 28px;opacity:0.4;filter:alpha(opacity=40); border-
radius:15px;}
.banner .b_bg .b_con .focus .f_btn ul li{width:8px;height:8px;border-radius:10px;border:1px solid #fff;float:left;list-style:none;margin:0
3px;}
.banner .b_bg .b_con .focus .f_btn ul .no{background:#fff;}
.banner .b_bg .b_con .focus .f_ear{width:46px;height:70px;display:block;background:url("images/icon.png") no-repeat;
position:absolute;display:none;
}
.banner .b_bg .b_con .focus:hover .f_ear{display:block;}
.banner .b_bg .b_con .focus .pre{left:10px;top:110px;background-position:-74px 0;}
.banner .b_bg .b_con .focus .pre:hover{background-position:-172px 0;}
.banner .b_bg .b_con .focus .next{right:10px;top:110px;background-position:-123px 0;}
.banner .b_bg .b_con .focus .next:hover{background-position:0 -57px;}
/*end focus*/
.clear{clear:both;}
</style>
</head>
<body>
<!--banner start-->
<div class="banner">
<div class="b_bg">
<div class="b_con">
<!--focus start-->
<div class="focus">
<ul class="f_pic">
<li>
<a href="#">
<img src="images/banner-3.jpg" alt="潭州学院" width="760" height="300" />
</a>
</li>
<li>
<a href="#">
<img src="images/banner-1.jpg" alt="潭州学院" width="760" height="300" />
</a>
</li>
<li>
<a href="#">
<img src="images/banner-2.jpg" alt="潭州学院" width="760" height="300" />
</a>
</li>
<li>
<a href="#">
<img src="images/banner-4.jpg" alt="潭州学院" width="760" height="300" />
</a>
</li>
<li>
<a href="#">
<img src="images/banner-5.jpg" alt="潭州学院" width="760" height="300" />
</a>
</li>
</ul>
<div class="f_btn">
<ul>
<li class="no" data-color="#4E4D9B"></li>
<li data-color="#A136D2"></li>
<li data-color="#6766CE"></li>
<li data-color="#563481"></li>
<li data-color="#009DE4"></li>
</ul>
</div>
<a href="#" class="f_ear pre"></a>
<a href="#" class="f_ear next"></a>
</div>
<!--end focus-->
</div>
</div>
</div>
<!--end banner-->
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script>
<script type="text/javascript">
$(function(){
// 焦点图切换
var index = 0;
// 轮展图切换
$(".f_btn").find("li").mouseover(function(){
// 控制小按钮
$(this).addClass("no").siblings().removeClass("no");
var _index = $(this).index(); // 获取当前选中的索引
index = _index; // 重新赋值
$(".f_pic").find("li").eq(_index).fadeIn("slow").siblings().hide(); // 联动切换
// 切换背景颜色
var background = $(this).data("color");
$(this).parents(".b_bg").css("background",background);
});
// 下一张
$(".next").click(function(){
index++;
var length = $(".f_pic").find("li").length;
if(index >= length){
index = 0;
}
// 切换背景颜色
var background = $(".f_btn").find("li").eq(index).data("color");
$(this).parents(".b_bg").css("background",background);
// 联动小按钮
$(".f_btn").find("li").eq(index).addClass("no").siblings().removeClass("no");
$(".f_pic").find("li").eq(index).fadeIn("slow").siblings().hide(); // 联动切换
});
// 上一张
$(".pre").click(function(){
index--;
var length = $(".f_pic").find("li").length;
if(index < 0){
index = length - 1;
}
// 切换背景颜色
var background = $(".f_btn").find("li").eq(index).data("color");
$(this).parents(".b_bg").css("background",background);
// 联动小按钮
$(".f_btn").find("li").eq(index).addClass("no").siblings().removeClass("no");
$(".f_pic").find("li").eq(index).fadeIn("slow").siblings().hide(); // 联动切换
});
// 自动切换,一般不使用setTimeout只执行一次
setInterval(function(){
index++;
var length = $(".f_pic").find("li").length;
if(index >= length){
index = 0;
}
// 切换背景颜色
var background = $(".f_btn").find("li").eq(index).data("color");
$(".b_bg").css("background",background);
// 联动小按钮
$(".f_btn").find("li").eq(index).addClass("no").siblings().removeClass("no");
$(".f_pic").find("li").eq(index).fadeIn("slow").siblings().hide(); // 联动切换
},2000);
});
</script>
</body>
</html>