Javascript 如何在钛设备中创建圆形进度条?
我正在使用钛Appcelerator,我需要帮助在应用程序中创建圆形进度条。谁能给我解释一下循环进度条是如何工作的,以及如何以循环的方式在循环中填充进度?这根本不是一个进度条,它是一个“活动指示器” 它不像进度条那样显示真正的进度。使用进度条,可以设置进度值(例如,0-100%)。这只会让用户知道他们需要等待 要创建活动指示器,请参见此处: 快速示例:Javascript 如何在钛设备中创建圆形进度条?,javascript,titanium-mobile,Javascript,Titanium Mobile,我正在使用钛Appcelerator,我需要帮助在应用程序中创建圆形进度条。谁能给我解释一下循环进度条是如何工作的,以及如何以循环的方式在循环中填充进度?这根本不是一个进度条,它是一个“活动指示器” 它不像进度条那样显示真正的进度。使用进度条,可以设置进度值(例如,0-100%)。这只会让用户知道他们需要等待 要创建活动指示器,请参见此处: 快速示例: var activityView = Ti.UI.createView({visible: false}); var activityIndic
var activityView = Ti.UI.createView({visible: false});
var activityIndicator = Ti.UI.createActivityIndicator({
message: 'Loading...',
height:'auto',
width:'auto'
});
activityView.add(activityIndicator);
activityView.show();
这个例子可以工作,但它没有样式。我会让你决定你想要它看起来怎么样。如果您想让它看起来像您发布的图像,请查看view属性上的backgroundColor、borderRadius和透明度。请立即使用此Alloy小部件:
原始答案 我知道这有点晚了,但我在工作了大约一天之后才发现这一点
- 我还没有在android上测试过
- 这不是动画,因为我不需要它为我的需要。要使其成为动画,请查看函数layer3.transform=Ti.UI.create2DMatrix().rotate(angle)中倒数第二行;您应该能够设置旋转角度的动画
功能循环压杆(选项)
{
var opts=期权;
如果(opts.percent==null | | opts.percent>1 | | opts.percent<0)opts.percent=1;
如果(opts.size==null)opts.size=46;
如果(opts.margin==null)opts.margin=4;
如果(opts.backgroundColor==null)opts.backgroundColor='#fff';
如果(opts.progressColor==null)opts.progressColor='#4ba818';
如果(opts.topper==null)opts.topper={};
如果(opts.topper.color==null)opts.topper.color='#fff';
如果(opts.topper.size==null)opts.topper.size=36;
如果(opts.font==null)opts.font={};
如果(opts.font.visible==null)opts.font.visible=true;
如果(opts.font.size==null)opts.font.size=12;
如果(opts.font.color==null)opts.font.color='#900';
如果(opts.font.shadowColor==null)opts.font.shadowColor='aaa';
如果(opts.font.shadowRadius==null)opts.font.shadowRadius=1;
如果(opts.font.shadowOffset==null)opts.font.shadowOffset={};
如果(opts.font.shadowOffset.x==null)opts.font.shadowOffset.x=0;
如果(opts.font.shadowOffset.y==null)opts.font.shadowOffset.y=1;
var mainHolder=Ti.UI.createView({
左:选项。左,
右:选项。对,
top:options.top,
底部:options.bottom,
宽度:opts.size+opts.margin,
高度:选择大小+选择边距,
边界半径:(选择大小+选择边距)/2,
backgroundColor:opts.backgroundColor
});
var holder=Ti.UI.createView({
宽度:opts.size,
高度:选择大小,
边界半径:选择大小/2
});
var layer1=Ti.UI.createView({
宽度:opts.size,
高度:选择大小,
边界半径:选择大小/2,
背景颜色:opts.progressColor
});
var layer2=Ti.UI.createView({
左:0,,
宽度:opts.size/2,
高度:选择大小,
主持人:{
x:1,
y:0.5
},
backgroundColor:opts.backgroundColor
});
var layer3=Ti.UI.createView({
右:0,,
宽度:opts.size/2,
高度:选择大小,
主持人:{
x:0,,
y:0.5
},
backgroundColor:opts.backgroundColor
});
var layer4=Ti.UI.createView({
右:0,,
宽度:opts.size/2,
高度:选择大小,
主持人:{
x:0,,
y:0.5
},
背景颜色:opts.progressColor
});
var-topper=Ti.UI.createView({
宽度:opts.topper.size,
高度:opts.topper.size,
边界半径:opts.topper.size/2,
背景颜色:opts.topper.color
});
var percentText=Ti.UI.createLabel({
可见:opts.font.visible,
宽度:Ti.UI.SIZE,
高度:Ti.UI.SIZE,
颜色:opts.font.color,
字体:{
fontSize:opts.font.size
},
shadowColor:opts.font.shadowColor,
阴影半径:opts.font.shadowRadius,
阴影偏移:{
x:opts.font.shadowOffset.x,
y:opts.font.shadowOffset.y
},
TEXT对齐:Ti.UI.TEXT\u对齐\u中心,
文本:(opts.percent*100)+'%
});
主支架。添加(支架);
添加(百分比文本);
增加(第1层);
添加(第2层);
支架。添加(第3层);
支架。添加(第4层);
支架。添加(顶部);
var百分比=选择百分比;
var角度=360*百分比;
layer2.visible=(角度>180)?假:真;
layer4.visible=(角度>180)?真:假;
layer3.transform=Ti.UI.create2DMatrix().旋转(角度);
返回主支架;
}
/*循环进度条选项
百分比:介于0和1之间的值
大小:圆形进度条的大小
边距:圆形进度条的边距
背景色:圆形区域的背景色
progressColor:进度条的背景色
--
topper.color:中心圆颜色
topper.size:中心圆的大小
---
font.visible:布尔值,用于显示字体或不显示字体
font.color:字体颜色
font.size:字体大小
font.shadowColor:字体阴影颜色
font.shadowRadius:字体阴影半径
font.shadowOffset.x:阴影阴影偏移量的x值
font.shadowOffset.y:阴影偏移量的y值
*/
var circleProgress1=circularProgressBar({
前50名,
百分之零点三五,,
尺码:46,
差额:4,
背景颜色:“#fff”,
progressColor:“#4ba818”,
顶部:{
颜色:“#fff”,
尺码:36
},
function circularProgressBar(options)
{
var opts = options;
if (opts.percent == null || opts.percent > 1 || opts.percent < 0) opts.percent = 1;
if (opts.size == null) opts.size = 46;
if (opts.margin == null) opts.margin = 4;
if (opts.backgroundColor == null) opts.backgroundColor = '#fff';
if (opts.progressColor == null) opts.progressColor = '#4ba818';
if (opts.topper == null) opts.topper = {};
if (opts.topper.color == null) opts.topper.color = '#fff';
if (opts.topper.size == null) opts.topper.size = 36;
if (opts.font == null) opts.font = {};
if (opts.font.visible == null) opts.font.visible = true;
if (opts.font.size == null) opts.font.size = 12;
if (opts.font.color == null) opts.font.color = '#900';
if (opts.font.shadowColor == null) opts.font.shadowColor = '#aaa';
if (opts.font.shadowRadius == null) opts.font.shadowRadius = 1;
if (opts.font.shadowOffset == null) opts.font.shadowOffset = {};
if (opts.font.shadowOffset.x == null) opts.font.shadowOffset.x = 0;
if (opts.font.shadowOffset.y == null) opts.font.shadowOffset.y = 1;
var mainHolder = Ti.UI.createView({
left: options.left,
right: options.right,
top: options.top,
bottom: options.bottom,
width: opts.size + opts.margin,
height: opts.size + opts.margin,
borderRadius: (opts.size + opts.margin) / 2,
backgroundColor: opts.backgroundColor
});
var holder = Ti.UI.createView({
width: opts.size,
height: opts.size,
borderRadius: opts.size / 2
});
var layer1 = Ti.UI.createView({
width: opts.size,
height: opts.size,
borderRadius: opts.size / 2,
backgroundColor: opts.progressColor
});
var layer2 = Ti.UI.createView({
left: 0,
width: opts.size / 2,
height: opts.size,
anchorPoint: {
x: 1,
y: 0.5
},
backgroundColor: opts.backgroundColor
});
var layer3 = Ti.UI.createView({
right: 0,
width: opts.size / 2,
height: opts.size,
anchorPoint: {
x: 0,
y: 0.5
},
backgroundColor: opts.backgroundColor
});
var layer4 = Ti.UI.createView({
right: 0,
width: opts.size / 2,
height: opts.size,
anchorPoint: {
x: 0,
y: 0.5
},
backgroundColor: opts.progressColor
});
var topper = Ti.UI.createView({
width: opts.topper.size,
height: opts.topper.size,
borderRadius: opts.topper.size / 2,
backgroundColor: opts.topper.color
});
var percentText = Ti.UI.createLabel({
visible: opts.font.visible,
width: Ti.UI.SIZE,
height: Ti.UI.SIZE,
color: opts.font.color,
font: {
fontSize:opts.font.size
},
shadowColor: opts.font.shadowColor,
shadowRadius: opts.font.shadowRadius,
shadowOffset: {
x: opts.font.shadowOffset.x,
y: opts.font.shadowOffset.y
},
textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER,
text: (opts.percent * 100) + '%'
});
mainHolder.add(holder);
topper.add(percentText);
holder.add(layer1);
holder.add(layer2);
holder.add(layer3);
holder.add(layer4);
holder.add(topper);
var percent = opts.percent;
var angle = 360 * percent;
layer2.visible = (angle > 180) ? false : true;
layer4.visible = (angle > 180) ? true : false;
layer3.transform = Ti.UI.create2DMatrix().rotate(angle);
return mainHolder;
}
/* Circular Progress Bar Options
percent: A value between 0 and 1
size: The size of the circular progress bar
margin: The margin of the circular progress bar
backgroundColor: The backgroundColor of the circular area
progressColor: The backgroundColor of the progress bar
--
topper.color: The center circle color
topper.size: The size of the center circle
---
font.visible: Boolean to display the font or not
font.color: The font color
font.size: The fontSize
font.shadowColor: The font shadow color
font.shadowRadius: The font shadow radius
font.shadowOffset.x: The x value of the shadow shadowOffset
font.shadowOffset.y: The y value of the shadow shadowOffset
*/
var circleProgress1 = circularProgressBar({
top:50,
percent:0.35,
size:46,
margin:4,
backgroundColor:'#fff',
progressColor:'#4ba818',
topper: {
color:'#fff',
size: 36
},
font: {
visible: true,
color: '#900',
size: 12,
shadowColor: '#aaa',
shadowRadius: 1,
shadowOffset: {
x: 0,
y: 1
}
}
});
win.add(circleProgress1);