我在屏幕的右边缘有一个“箭头”图像,指向右边。 它是隐藏在屏幕外的更大图像的一部分。 通过抓住这个箭头,我希望它指向并向左滑动,在屏幕内拖动隐藏的图像的其余部分。 如果可以的话,我还想设置滑动图像的滑动速度。 像这样的东西: 有可能吗?
答案 0 :(得分:0)
要回答您的问题,是,这是可能的。
希望您使用固定宽度的商品,在这种情况下,您可以在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);