真心觉得不错,和大家分享一下,不是我写的,我只是转发一下而已
这个原理其实不难,就是如果把图标的排列由方形变圆形,再由圆形变方形的过程,加上个旋转和移动的特效.
下面是我用flex实现的咕噜滚原理展示
http://218.204.254.111:9980/DmHome/Grollum.html
算法简析
1.确定一个圆形,算出圆的中心点坐标,和半径.
2.找出一个基准点,算出这点的坐标和角度.
3.根据这个基准点算出圆环上每一点的坐标和角度.
4.把图标旋转并移动到圆环上.
这个类似经典的球的圆周运动.
可参考:
http://www.cnblogs.com/yjmyzz/archive/2010/04/20/1716504.html
具体在Android运用的话,只要根据以原理,把屏幕上的图标变成圆,再用一下斜率就可以实现GO的滑屏滚动效果.
需要具体算法的话,下次可能整理一下贴出来.
textFieldCount.adjustsFontSizeToFitWidth = YES; textFieldCount.minimumFontSize = 1.0f;
adjustsFontSizeToFitWidth:设置字体大小是否自动适应控件宽度
minimumFontSize:设置最小字体,超过这个最小字体后,控件字体不会再变小.
xaml页面
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<InkPresenter Height="629"
HorizontalAlignment="Left"
Margin="-12,-22,0,0"
Name="inkPresenter1"
VerticalAlignment="Top"
Width="462"
LostMouseCapture="inkPresenter1_LostMouseCapture"
MouseLeftButtonDown="inkPresenter1_MouseLeftButtonDown"
MouseMove="inkPresenter1_MouseMove"
Background="white"/>
</Grid>
cs页面
public partial class InkPresenter : PhoneApplicationPage
{
Stroke NewStroke;
public InkPresenter()
{
InitializeComponent();
}
private void inkPresenter1_LostMouseCapture(object sender, MouseEventArgs e)
{
//将笔画清空
NewStroke = null;
}
private void inkPresenter1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//让鼠标捕获数据
inkPresenter1.CaptureMouse();
//收集笔触数据点保存值StylusPointCollection集合中
StylusPointCollection spc = new StylusPointCollection();
spc.Add(e.StylusDevice.GetStylusPoints(inkPresenter1));
//将数据点的结合保存为一个笔画
NewStroke = new Stroke(spc);
//设置笔画的绘画效果,如颜色,大小等。
NewStroke.DrawingAttributes.Color = Colors.Red;
this.inkPresenter1.Strokes.Add(NewStroke);
}
private void inkPresenter1_MouseMove(object sender, MouseEventArgs e)
{
//在鼠标移动的过程中将数据点加入到笔画中去。
if (NewStroke!=null)
{
NewStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(inkPresenter1));
}
}
}
都有注释自己看下哦!