[:ru]В этом видеоуроке рассмотрим интересную библиотеку для создания анимации загрузки с эффектом наполнения жидкости. Исходный код примера — ниже под видео.
Для подключения библиотеки в проект добавьте зависимость в файл сборки Build.gradle (App):
dependencies { compile 'me.itangqi.waveloadingview:library:0.3.5' // I have uploaded v0.3.5 on 2017-01-06, if it doesn't take effect or your // gradle cannot find it in maven central, you may try v0.3.4. }
В видео также используется компонент DiscreteSeekBar, его можно добавить так:
compile 'org.adw.library:discrete-seekbar:1.0.0'
Добавим компоненты в макете главного экрана activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.vitaly.waveloadingview.MainActivity"> <me.itangqi.waveloadingview.WaveLoadingView android:id="@+id/waveLoadingView" android:layout_width="wrap_content" android:layout_height="wrap_content" app:wlv_borderColor="@color/colorAccent" app:wlv_borderWidth="3dp" app:wlv_progressValue="40" app:wlv_shapeType="circle" app:wlv_round_rectangle="true" app:wlv_triangle_direction="north" app:wlv_titleCenterStrokeColor="@android:color/holo_blue_dark" app:wlv_titleCenterStrokeWidth="3dp" app:wlv_titleCenter="Center Title" app:wlv_titleCenterColor="@android:color/white" app:wlv_titleCenterSize="24sp" app:wlv_waveAmplitude="70" app:wlv_waveColor="@color/colorAccent"/> <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar android:id="@+id/seekbar_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" app:dsb_indicatorColor="@color/colorPrimary" app:dsb_max="100" app:dsb_min="0" app:dsb_progressColor="@color/colorPrimary" app:dsb_value="50" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="41dp" /> </RelativeLayout>
В классе MainActivity.java в методе onCreate пишем реализацию, устанавливаем параметры и слушатели:
import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import org.adw.library.widgets.discreteseekbar.DiscreteSeekBar; import me.itangqi.waveloadingview.WaveLoadingView; public class MainActivity extends AppCompatActivity { WaveLoadingView mWaveLoadingView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWaveLoadingView = (WaveLoadingView) findViewById(R.id.waveLoadingView); mWaveLoadingView.setShapeType(WaveLoadingView.ShapeType.CIRCLE); //mWaveLoadingView.setTopTitle("Top Title"); //mWaveLoadingView.setCenterTitleColor(Color.GREEN); //mWaveLoadingView.setBottomTitleSize(18); mWaveLoadingView.setProgressValue(50); // mWaveLoadingView.setBorderWidth(10); mWaveLoadingView.setAmplitudeRatio(60); //mWaveLoadingView.setWaveColor(Color.RED); //mWaveLoadingView.setBorderColor(Color.RED); mWaveLoadingView.setTopTitleStrokeColor(Color.GREEN); mWaveLoadingView.setTopTitleStrokeWidth(3); mWaveLoadingView.setAnimDuration(3000); // mWaveLoadingView.pauseAnimation(); // mWaveLoadingView.resumeAnimation(); // mWaveLoadingView.cancelAnimation(); mWaveLoadingView.startAnimation(); ((DiscreteSeekBar) findViewById(R.id.seekbar_progress)) .setOnProgressChangeListener (new DiscreteSeekBar.OnProgressChangeListener() { @Override public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) { mWaveLoadingView.setProgressValue(value); } @Override public void onStartTrackingTouch(DiscreteSeekBar seekBar) { } @Override public void onStopTrackingTouch(DiscreteSeekBar seekBar) { } }); } }
В коде закоментированы дополнительные параметры. Раскоментируйте и поэкспериментируйте с ними. Полный перечень параметров — на странице библиотеки в GitHub.[:en]In this video tutorial, consider an interesting library to create animations load effect of liquid filling. The source code example — under the below video.
To connect the library to your project, add the dependency in Build.gradle (App) assembly file:
dependencies { compile 'me.itangqi.waveloadingview:library:0.3.5' // I have uploaded v0.3.5 on 2017-01-06, if it doesn't take effect or your // gradle cannot find it in maven central, you may try v0.3.4. }
The video is also used DiscreteSeekBar component, it can be added as follows:
compile 'org.adw.library:discrete-seekbar:1.0.0'
Add a component in the layout of the main screen activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.vitaly.waveloadingview.MainActivity"> <me.itangqi.waveloadingview.WaveLoadingView android:id="@+id/waveLoadingView" android:layout_width="wrap_content" android:layout_height="wrap_content" app:wlv_borderColor="@color/colorAccent" app:wlv_borderWidth="3dp" app:wlv_progressValue="40" app:wlv_shapeType="circle" app:wlv_round_rectangle="true" app:wlv_triangle_direction="north" app:wlv_titleCenterStrokeColor="@android:color/holo_blue_dark" app:wlv_titleCenterStrokeWidth="3dp" app:wlv_titleCenter="Center Title" app:wlv_titleCenterColor="@android:color/white" app:wlv_titleCenterSize="24sp" app:wlv_waveAmplitude="70" app:wlv_waveColor="@color/colorAccent"/> <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar android:id="@+id/seekbar_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" app:dsb_indicatorColor="@color/colorPrimary" app:dsb_max="100" app:dsb_min="0" app:dsb_progressColor="@color/colorPrimary" app:dsb_value="50" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="41dp" /> </RelativeLayout>
In MainActivity.java class in the method onCreate write implementation, set the parameters and listeners:
import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import org.adw.library.widgets.discreteseekbar.DiscreteSeekBar; import me.itangqi.waveloadingview.WaveLoadingView; public class MainActivity extends AppCompatActivity { WaveLoadingView mWaveLoadingView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWaveLoadingView = (WaveLoadingView) findViewById(R.id.waveLoadingView); mWaveLoadingView.setShapeType(WaveLoadingView.ShapeType.CIRCLE); //mWaveLoadingView.setTopTitle("Top Title"); //mWaveLoadingView.setCenterTitleColor(Color.GREEN); //mWaveLoadingView.setBottomTitleSize(18); mWaveLoadingView.setProgressValue(50); // mWaveLoadingView.setBorderWidth(10); mWaveLoadingView.setAmplitudeRatio(60); //mWaveLoadingView.setWaveColor(Color.RED); //mWaveLoadingView.setBorderColor(Color.RED); mWaveLoadingView.setTopTitleStrokeColor(Color.GREEN); mWaveLoadingView.setTopTitleStrokeWidth(3); mWaveLoadingView.setAnimDuration(3000); // mWaveLoadingView.pauseAnimation(); // mWaveLoadingView.resumeAnimation(); // mWaveLoadingView.cancelAnimation(); mWaveLoadingView.startAnimation(); ((DiscreteSeekBar) findViewById(R.id.seekbar_progress)) .setOnProgressChangeListener (new DiscreteSeekBar.OnProgressChangeListener() { @Override public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) { mWaveLoadingView.setProgressValue(value); } @Override public void onStartTrackingTouch(DiscreteSeekBar seekBar) { } @Override public void onStopTrackingTouch(DiscreteSeekBar seekBar) { } }); } }
In the code commented out additional options. Uncomment and experiment with them. A complete list of parameters — on library page in GitHub.[:]