Как установить макет мерцания программно в Java?

Я хочу установить продолжительность компоновки мерцания программно в Java.

Я сделал это в XML, он работает, но я хочу сделать это на Java.

Вот код XML:

<com.facebook.shimmer.ShimmerFrameLayout
    android:id="@+id/shimmerHomeActivity_TradingEbooks"
    android:layout_width="match_parent"
    app:shimmer_shape="radial"
    app:shimmer_auto_start="true"
    app:shimmer_duration="800"
    app:shimmer_repeat_mode="restart"
    android:layout_alignParentTop="true"
    android:layout_height="wrap_content">

    <include layout="@layout/layout_shimmer_home_activity_trading_courses"/>
</com.facebook.shimmer.ShimmerFrameLayout>

Вот мой код Java:

public class HomeActivity extends Fragment{


    private ShimmerFrameLayout shimmerCarousel;
    private static final int shimmerDuration = 1500;

    public HomeActivity() {
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    @Nullable
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState){

    View view = inflater.inflate(R.layout.activity_home, container, false);

    context = getActivity().getApplicationContext();

    shimmerCarousel = view.findViewById(R.id.shimmerHomeActivity_Carousel);
    }
}    

Я уже знаю, как сделать это в XML, но я хочу назначить его с помощью Java.

Я ищу Java или лучшее решение Kotlin.

2 ответа

Решение

Я прочитал источник Shimmer, как я понял, для этой версии (V 0.4.0), разработчики не могут программно установить продолжительность анимации.

Таким образом, вы должны клонировать библиотеку и изменить ее самостоятельно, или вы можете легко использовать эту библиотеку.

В этом примере я программно создаю эффект мерцания в TextView, устанавливаю продолжительность и некоторые другие вещи:

          //Create shimmer builder
    Shimmer.ColorHighlightBuilder shimmerBuilder = new Shimmer.ColorHighlightBuilder()
                                    .setBaseColor(ContextCompat.getColor(context, R.color.White))
                                    .setHighlightColor(ContextCompat.getColor(context, R.color.White))
                                    .setDuration(1200)
                                    .setIntensity(0.9f)
                                    .setDropoff(0.9f)
                                    .setBaseAlpha(0.6f)
                                    .setHighlightAlpha(1f);
    //Create shimmer
    Shimmer shimmer = shimmerBuilder.build();
    
    //Creating some view to apply the shimmer     
    TextView myTextView = new TextView(context);

    //Creating the shimmer frame layout
    ShimmerFrameLayout shimmerContainer = new ShimmerFrameLayout(context);
    shimmerContainer.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT));
    shimmerContainer.addView(myTextView);
    shimmerContainer.setShimmer(shimmer);
    shimmerContainer.showShimmer(true);

    ...

    //Adding the shimmerContainer to the some view
    myView.addView(shimmerContainer);

Вы также можете использовать Shimmer.AlphaHighlightBuilder.
Чтобы остановить использование мерцания shimmerContainer.hideShimmer();
Ознакомьтесь с документацией здесь для получения дополнительной информации.

Другие вопросы по тегам