不断学习,做更好的自己!💪
开始使用
qmui
1. 引入库
请确保配置了 JCenter 仓库源,然后直接引用:
implementation "com.qmuiteam:qmui:2.0.0-alpha10"
至此,QMUI 已被引入项目中。
2. 配置主题
把项目的 theme 的 parent 指向 QMUI.Compat,至此,QMUI 可以正常工作。
<style name="Theme.QMUIDemo" parent="QMUI.Compat.NoActionBar"></style>
基本使用
1. 效果图
2. 布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/colorHelper_square_alpha_background">
<com.qmuiteam.qmui.widget.QMUITopBar
android:id="@+id/topbar"
android:layout_width="match_parent"
android:layout_height="60dp"/>
<com.qmuiteam.qmui.widget.QMUIViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
3. CardTransformer.java
/**
* Created on 2022/4/7 16:33
*
* @author Gong Youqiang
*/
public class CardTransformer implements ViewPager.PageTransformer {
public void transformPage( View page, float position) {
// 刷新数据notifyDataSetChange之后也会调用到transformPage,但此时的position可能不在[-1, 1]之间
if (position <= -1 || position >= 1f) {
page.setRotation(0);
} else {
page.setRotation(position * 30);
page.setPivotX(page.getWidth() * .5f);
page.setPivotY(page.getHeight() * 1f);
}
}
}
4. ViewPagerActivity.java
public class ViewPagerActivity extends BaseActivity {
(R.id.topbar)
QMUITopBar mTopBar;
(R.id.pager)
QMUIViewPager mViewPager;
private List<String> mItems = new ArrayList<>();
protected int getLayoutId() {
return R.layout.activity_view_pager;
}
protected void initView() {
initData(5);
initTopBar();
initPagers();
}
private void initData(int count) {
for (int i = 0; i < count; i++) {
mItems.add(String.valueOf(i));
}
}
private void initTopBar() {
mTopBar.addLeftBackImageButton().setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
mTopBar.setTitle("QMUIViewPager");
}
private void initPagers() {
QMUIPagerAdapter pagerAdapter = new QMUIPagerAdapter() {
public boolean isViewFromObject( View view, Object object) {
return view == object;
}
public int getCount() {
return mItems.size();
}
public CharSequence getPageTitle(int position) {
return mItems.get(position);
}
protected Object hydrate( ViewGroup container, int position) {
return new ItemView(ViewPagerActivity.this);
}
protected void populate( ViewGroup container, Object item, int position) {
ItemView itemView = (ItemView) item;
itemView.setText(mItems.get(position));
container.addView(itemView);
}
protected void destroy( ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
};
//setPageTransformer默认采用ViewCompat.LAYER_TYPE_HARDWARE, 但它在某些4.x的国产机下会crash
boolean canUseHardware = Build.VERSION.SDK_INT >= 21;
mViewPager.setPageTransformer(false, new CardTransformer(),
canUseHardware ? ViewCompat.LAYER_TYPE_HARDWARE : ViewCompat.LAYER_TYPE_SOFTWARE);
mViewPager.setInfiniteRatio(500);
mViewPager.setEnableLoop(true);
mViewPager.setAdapter(pagerAdapter);
}
static class ItemView extends FrameLayout {
private TextView mTextView;
public ItemView(Context context) {
super(context);
mTextView = new TextView(context);
mTextView.setTextSize(20);
mTextView.setTextColor(ContextCompat.getColor(context, R.color.app_color_theme_5));
mTextView.setGravity(Gravity.CENTER);
mTextView.setBackgroundColor(ContextCompat.getColor(context, R.color.white));
int size = QMUIDisplayHelper.dp2px(context, 300);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(size, size);
lp.gravity = Gravity.CENTER;
addView(mTextView, lp);
}
public void setText(CharSequence text) {
mTextView.setText(text);
}
}
}