不断学习,做更好的自己!💪

开始使用

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. 效果图
【Kevin Learn QMUI】--> QMUIViewPager_ViewPager

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 {
@Override
public void transformPage(@NonNull 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 {
@BindView(R.id.topbar)
QMUITopBar mTopBar;
@BindView(R.id.pager)
QMUIViewPager mViewPager;

private List<String> mItems = new ArrayList<>();

@Override
protected int getLayoutId() {
return R.layout.activity_view_pager;
}

@Override
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() {
@Override
public void onClick(View v) {
finish();
}
});
mTopBar.setTitle("QMUIViewPager");
}

private void initPagers() {
QMUIPagerAdapter pagerAdapter = new QMUIPagerAdapter() {

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}

@Override
public int getCount() {
return mItems.size();
}

@Override
public CharSequence getPageTitle(int position) {
return mItems.get(position);
}

@Override
@NonNull
protected Object hydrate(@NonNull ViewGroup container, int position) {
return new ItemView(ViewPagerActivity.this);
}

@Override
protected void populate(@NonNull ViewGroup container, @NonNull Object item, int position) {
ItemView itemView = (ItemView) item;
itemView.setText(mItems.get(position));
container.addView(itemView);
}

@Override
protected void destroy(@NonNull ViewGroup container, int position, @NonNull 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);
}
}
}