📅  最后修改于: 2023-12-03 15:28:57.625000             🧑  作者: Mango
自定义应用栏在移动应用开发中非常常见,而其中一个重要特性就是颤振。颤振可以让应用栏在用户滑动屏幕时增加动态感,提高用户体验。
在本文中,我们将介绍如何在Android应用中实现一个颤振自定义应用栏。
我们首先需要创建一个布局文件来定义自定义应用栏的样式。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@color/colorPrimary">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="@android:color/white"/>
</RelativeLayout>
上面的代码定义了一个50dp高的RelativeLayout,其中包含一个TextView。
我们需要创建一个自定义View作为自定义应用栏的容器,并实现颤振的逻辑。代码如下:
public class ShakyToolbar extends RelativeLayout {
private static final int SHAKE_OFFSET_DP = 4;
private float mShakeOffset;
private boolean mShakeDirectionRight = true;
private boolean mShaking = false;
private View mTitleView;
public ShakyToolbar(Context context) {
super(context);
init(context);
}
public ShakyToolbar(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public ShakyToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
mShakeOffset = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
SHAKE_OFFSET_DP,
context.getResources().getDisplayMetrics()
);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mTitleView = findViewById(R.id.title);
}
public void startShaking() {
if (mShaking) {
return;
}
shake();
}
public void stopShaking() {
mShaking = false;
}
private void shake() {
mShaking = true;
mTitleView.animate()
.translationX(mShakeDirectionRight ? mShakeOffset : -mShakeOffset)
.setDuration(100)
.withEndAction(new Runnable() {
@Override
public void run() {
if (mShaking) {
mShakeDirectionRight = !mShakeDirectionRight;
shake();
}
}
})
.start();
}
}
上面的代码中,我们定义了一个自定义View,它继承自RelativeLayout。在init()方法中,我们定义了颤振时的偏移量,同时在onFinishInflate()方法中获取了自定义应用栏中的TextView。
startShaking()方法将导致应用栏开始颤振,而stopShaking()方法将使其停止。
在shake()方法中,我们使用了平移动画来实现颤振的效果。如果动画完成后,应用栏仍然需要继续颤振,则会递归调用shake()方法。
最后,我们需要在Activity中使用这个自定义应用栏。代码如下:
public class MainActivity extends AppCompatActivity {
private ShakyToolbar mShakyToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mShakyToolbar = (ShakyToolbar) findViewById(R.id.shaky_toolbar);
if (mShakyToolbar != null) {
mShakyToolbar.startShaking();
}
}
@Override
protected void onStop() {
super.onStop();
if (mShakyToolbar != null) {
mShakyToolbar.stopShaking();
}
}
}
上面的代码在Activity的onCreate()方法中获取了自定义应用栏并开始颤振,而在onStop()方法中停止颤振。
通过实现上述步骤,我们已经实现了一个Android中的颤振自定义应用栏。这个自定义应用栏可以提高用户体验,增加应用的动态感,并使应用更加现代化。