我正试图解决这个问题。 基本上我的Firemonkey安卓应用程序上有一个标签控件,可以向左或向右滑动以更改选项卡,它可以正常工作。
我想加强刷卡,所以它的行为更像是android app抽屉。我的意思是,如果你长时间向左或向右慢慢滑动手指,屏幕内容会用手指向左/向右移动,而不是我现在所拥有的,它一次只能移动整个屏幕,而不是在手指下方慢慢移动
THorzScrollBox接近我想要的效果,但它不会“捕捉”到单个屏幕上,而是可以将屏幕的一半和两半留在两页上。
我在这里有意义吗?
我正在使用XE8,但我无法在早期版本上使用它!
非常感谢,
伊恩。
答案 0 :(得分:0)
如果有人感兴趣,我刚刚创建了一个新的TTabcontrol来增强刷卡
您可以在此处查看代码来源 (svn)https://svn.code.sf.net/p/alcinoe/code/
,演示在这里: (svn)https://svn.code.sf.net/p/alcinoe/code/demos/ALFmxControls
欢迎任何评论 :)
我还继续我的逻辑:创建一套firemonkey控件,他们画得非常快,独立于OpenGL而且不适合这种风格(我发现firemonkey中的风格非常低效且维护起来非常复杂),所以我创建这个tabcontrol作为Tcontrol的后代,而不是作为TStyleControl的后代。
我觉得使用像trectangle + ttext这样的基本组件来创建标签的标题(即:按钮)要比为每个平台更新如此复杂的Stylebook(ioe,android,windows,macos,等)
如果你将我的Tabcontrol(ALFmxTabControl.pas)的单位与delphi TabControl(Fmx.TabControl.pas)的单位进行比较,那么你会发现我使用的代码行数减少了3.5倍(1018对3550),更少的代码行=总是更好
请在此投票支持此功能请求: https://quality.embarcadero.com/browse/RSP-15576
答案 1 :(得分:0)
尝试THorzScrollBox.AniCalculations.SetTargets(...)
。
例如
1.打开FMX.HorizontalScroll Sample : CPP\Mobile Snippets\HorizontalScroll
2.添加表单事件:OnResize
3.编写代码:
#include <FMX.InertialMovement.hpp>
void __fastcall THorizontalScrollForm::FormResize(TObject *Sender)
{
TAniCalculations::TTarget target[4];
// Set ths size and position of your slides.
Image1->SetBounds(0, 0, HorzScrollBox1->Width, HorzScrollBox1->Height);
Image2->SetBounds(HorzScrollBox1->Width, 0, HorzScrollBox1->Width, HorzScrollBox1->Height);
Image3->SetBounds(HorzScrollBox1->Width*2, 0, HorzScrollBox1->Width, HorzScrollBox1->Height);
Image4->SetBounds(HorzScrollBox1->Width*3, 0, HorzScrollBox1->Width, HorzScrollBox1->Height);
// Assign the check point(your slides' top-left conner).
target[0].TargetType = TAniCalculations::TTargetType::Other;
target[0].Point = TPointD(1, 0);
target[1].TargetType = TAniCalculations::TTargetType::Other;
target[1].Point = TPointD(HorzScrollBox1->Width, 0);
target[2].TargetType = TAniCalculations::TTargetType::Other;
target[2].Point = TPointD(HorzScrollBox1->Width*2, 0);
target[3].TargetType = TAniCalculations::TTargetType::Other;
target[3].Point = TPointD(HorzScrollBox1->Width*3, 0);
HorzScrollBox1->AniCalculations->SetTargets(target, 3);
}