首页 > 解决方案 > 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);

推荐阅读