Android - 滑动按钮(箭头)

时间:2018-04-26 08:17:13

标签: android

我在屏幕的右边缘有一个“箭头”图像,指向右边。 它是隐藏在屏幕外的更大图像的一部分。 通过抓住这个箭头,我希望它指向并向左滑动,在屏幕内拖动隐藏的图像的其余部分。 如果可以的话,我还想设置滑动图像的滑动速度。 像这样的东西: What I'd like to obtain 有可能吗?

1 个答案:

答案 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);