android - Android - 滑动按钮(箭头)
问题描述
我在屏幕的右边缘有一个“箭头”图像,指向右侧。它是隐藏在屏幕外的更大图像的一部分。通过单击此箭头,我希望它指向并向左滑动,在屏幕内拖动隐藏的图像的其余部分。如果可以的话,我还想设置滑动图像的滑动速度。像这样的东西: 有可能吗?
解决方案
要回答您的问题,是的,这是可能的。
希望您为您的项目使用固定宽度,在这种情况下,您只需将其放入onCreate()
并启动您的ValueAnimator
. 如果不是,您将需要等待布局被绘制并获取您的宽度onGlobalLayout
回调。
public void onCreate(){
super.onCreate(..)
...
init();
...
}
像这样:
private void init(){
mButtonView = findViewById(R.id.button_view);
ImageView arrowButton = mButtonView.findViewById(R.id.arrow_image_container);
arrowButton.setOnClickListener(this);
int visibleLength = arrowButton.getWidth();
int totalLength = mButtonView.getWidth();
int translationDistance = totalLength - visibleLength;
mButtonTranslator = ValueAnimator.ofInt(0,translationDistance);
mButtonTranslator.addUpdateListener((animatedValue)->{
float distanceTraveled = (float)animatedValue.getAnimatedValue();
mButtonView.setTranslationX(distanceTraveled);
});
}
实现View.OnClickListener
并添加一个切换方法:
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.R.id.arrow_image_container:
toggleButton();
break;
}
}
有一个布尔成员 (mIsButtonVisible) 来保持可见性状态:
private void toggleButton(){
if (mIsButtonVisible){
hideButton(true);
} else {
showButton(true);
}
}
节目:
private void showButton(boolean animate){
if (!mIsButtonVisible){
mButtonTranslator.setDuration(animate ? ANIMATION_DURATION_IN_MILLIS : 0);
mButtonTranslator.start();
mIsButtonVisible = true;
}
}
并隐藏:
private void hideButton(boolean animate){
if (mIsButtonVisible){
mButtonTranslator.setDuration(animate ? ANIMATION_DURATION_IN_MILLIS : 0);
mButtonTranslator.reverse();
mIsButtonVisible = false;
}
}
完成初始化并初始化动画师后,您可以将按钮隐藏在屏幕之外onViewCreated()
:
hideButton(false);
推荐阅读
- python - Pandas 基于行值的新列
- azure-logic-apps - 逻辑应用无法反序列化 Azure 数据工厂管道错误消息
- binary-tree - DEFLATE Huffman 树的大小限制
- python - 根据自定义条件过滤 csv 中的行
- c# - 如何扩展具有 50000 个同时任务的应用程序
- python - 交互式回归结果
- sql-server - 运行总库存缓慢性能 - SQL Server 2016
- javascript - Angular 9从指令中获取组件类实例
- google-cloud-platform - Cloud Run 端点入门 - 请求超时或请求过大错误
- wpf - 从控制台应用程序加载 WPF 程序集