日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java切换卡片_CardView之可切换式卡片

發布時間:2024/1/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java切换卡片_CardView之可切换式卡片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天我所要作的筆記是:

可切換式的卡片CardView。

Java代碼部分

1、我們要根據自己的當前版本號添加相對應的一個依賴:

implementation 'com.android.support:cardview-v7:28.0.0'

2、編寫Fragment,在自己需要Activity中添加Fragment,在該Fragment編寫如下代碼。我的Fragment是DiscoveryFragment。

public class DiscoveryFragment extends Fragment {

private ViewPager mViewPager;

private CardPagerAdapter mCardAdapter;

private ShadowTransformer mCardShadowTransformer;

private CardView mCardView;

public DiscoveryFragment() {

// Required empty public constructor

}

View view;

@Nullable

@Override

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

// Inflate the layout for this fragment

if(view == null) {

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

mCardView = view.findViewById(R.id.cardView);

mCardView.setMaxCardElevation(mCardView.getCardElevation()

* CardAdapter.MAX_ELEVATION_FACTOR);

initCard();

}

return view;

}

private void initCard() {

mViewPager = view.findViewById(R.id.viewPager);

mCardAdapter = new CardPagerAdapter();

mCardAdapter.addCardItem(new CardItem(R.string.title_1, R.string.text_1));

mCardAdapter.addCardItem(new CardItem(R.string.title_2, R.string.text_1));

mCardAdapter.addCardItem(new CardItem(R.string.title_3, R.string.text_1));

mCardAdapter.addCardItem(new CardItem(R.string.title_4, R.string.text_1));

mCardShadowTransformer = new ShadowTransformer(mViewPager, mCardAdapter);

mCardShadowTransformer.enableScaling(true);

mViewPager.setAdapter(mCardAdapter);

mViewPager.setPageTransformer(false, mCardShadowTransformer);

mViewPager.setOffscreenPageLimit(3);

}

public CardView getCardView() {

return mCardView;

}

}

3、CardFragmentPagerAdapter

public class CardFragmentPagerAdapter extends FragmentStatePagerAdapter implements CardAdapter {

private List mFragments;

private float mBaseElevation;

public CardFragmentPagerAdapter(FragmentManager fm, float baseElevation) {

super(fm);

mFragments = new ArrayList<>();

mBaseElevation = baseElevation;

for(int i = 0; i< 5; i++){

addCardFragment(new DiscoveryFragment());

}

}

@Override

public float getBaseElevation() {

return mBaseElevation;

}

@Override

public CardView getCardViewAt(int position) {

return mFragments.get(position).getCardView();

}

@Override

public int getCount() {

return mFragments.size();

}

@Override

public Fragment getItem(int position) {

return mFragments.get(position);

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

Object fragment = super.instantiateItem(container, position);

mFragments.set(position, (DiscoveryFragment) fragment);

return fragment;

}

public void addCardFragment(DiscoveryFragment fragment) {

mFragments.add(fragment);

}

}

4、CardPagerAdapter

public class CardPagerAdapter extends PagerAdapter implements CardAdapter {

private List mViews;

private List mData;

private float mBaseElevation;

public CardPagerAdapter() {

mData = new ArrayList<>();

mViews = new ArrayList<>();

}

public void addCardItem(CardItem item) {

mViews.add(null);

mData.add(item);

}

public float getBaseElevation() {

return mBaseElevation;

}

@Override

public CardView getCardViewAt(int position) {

return mViews.get(position);

}

@Override

public int getCount() {

return mData.size();

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

View view = LayoutInflater.from(container.getContext())

.inflate(R.layout.adapter, container, false);

container.addView(view);

bind(mData.get(position), view);

CardView cardView = view.findViewById(R.id.cardView);

if (mBaseElevation == 0) {

mBaseElevation = cardView.getCardElevation();

}

cardView.setMaxCardElevation(mBaseElevation * MAX_ELEVATION_FACTOR);

mViews.set(position, cardView);

return view;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView((View) object);

mViews.set(position, null);

}

private void bind(CardItem item, View view) {

TextView titleTextView = (TextView) view.findViewById(R.id.titleTextView);

TextView contentTextView = (TextView) view.findViewById(R.id.contentTextView);

titleTextView.setText(item.getTitle());

contentTextView.setText(item.getText());

}

}

5、CardItem

public class CardItem {

private int mTextResource;

private int mTitleResource;

public CardItem(int title, int text) {

mTitleResource = title;

mTextResource = text;

}

public int getText() {

return mTextResource;

}

public int getTitle() {

return mTitleResource;

}

}

6、ShadowTransformer

public class ShadowTransformer implements ViewPager.OnPageChangeListener, ViewPager.PageTransformer {

private ViewPager mViewPager;

private CardAdapter mAdapter;

private float mLastOffset;

private boolean mScalingEnabled;

public ShadowTransformer(ViewPager viewPager, CardAdapter adapter) {

mViewPager = viewPager;

viewPager.addOnPageChangeListener(this);

mAdapter = adapter;

}

public void enableScaling(boolean enable) {

if (mScalingEnabled && !enable) {

// shrink main card

CardView currentCard = mAdapter.getCardViewAt(mViewPager.getCurrentItem());

if (currentCard != null) {

currentCard.animate().scaleY(1);

currentCard.animate().scaleX(1);

}

}else if(!mScalingEnabled && enable){

// grow main card

CardView currentCard = mAdapter.getCardViewAt(mViewPager.getCurrentItem());

if (currentCard != null) {

currentCard.animate().scaleY(1.1f);

currentCard.animate().scaleX(1.1f);

}

}

mScalingEnabled = enable;

}

@Override

public void transformPage(View page, float position) {

}

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

int realCurrentPosition;

int nextPosition;

float baseElevation = mAdapter.getBaseElevation();

float realOffset;

boolean goingLeft = mLastOffset > positionOffset;

// If we're going backwards, onPageScrolled receives the last position

// instead of the current one

if (goingLeft) {

realCurrentPosition = position + 1;

nextPosition = position;

realOffset = 1 - positionOffset;

} else {

nextPosition = position + 1;

realCurrentPosition = position;

realOffset = positionOffset;

}

// Avoid crash on overscroll

if (nextPosition > mAdapter.getCount() - 1

|| realCurrentPosition > mAdapter.getCount() - 1) {

return;

}

CardView currentCard = mAdapter.getCardViewAt(realCurrentPosition);

// This might be null if a fragment is being used

// and the views weren't created yet

if (currentCard != null) {

if (mScalingEnabled) {

currentCard.setScaleX((float) (1 + 0.1 * (1 - realOffset)));

currentCard.setScaleY((float) (1 + 0.1 * (1 - realOffset)));

}

currentCard.setCardElevation((baseElevation + baseElevation

* (CardAdapter.MAX_ELEVATION_FACTOR - 1) * (1 - realOffset)));

}

CardView nextCard = mAdapter.getCardViewAt(nextPosition);

// We might be scrolling fast enough so that the next (or previous) card

// was already destroyed or a fragment might not have been created yet

if (nextCard != null) {

if (mScalingEnabled) {

nextCard.setScaleX((float) (1 + 0.1 * (realOffset)));

nextCard.setScaleY((float) (1 + 0.1 * (realOffset)));

}

nextCard.setCardElevation((baseElevation + baseElevation

* (CardAdapter.MAX_ELEVATION_FACTOR - 1) * (realOffset)));

}

mLastOffset = positionOffset;

}

@Override

public void onPageSelected(int position) {

}

@Override

public void onPageScrollStateChanged(int state) {

}

}

7、CardAdapter

public interface CardAdapter {

int MAX_ELEVATION_FACTOR = 8;

float getBaseElevation();

CardView getCardViewAt(int position);

int getCount();

}

XML文件

1、CardPagerAdapter的布局文件adapter

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:id="@+id/cardView"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

app:cardUseCompatPadding="true">

android:layout_width="match_parent"

android:layout_height="wrap_content">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:padding="24dp">

android:id="@+id/titleTextView"

style="@style/TextAppearance.AppCompat.Title"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:id="@+id/contentTextView"

style="@style/TextAppearance.AppCompat.Body1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="24dp"/>

style="@style/ButtonStyle"

android:layout_width="match_parent"

android:layout_height="@dimen/dp40"

android:layout_marginTop="@dimen/dp100"

android:layout_gravity="bottom"

android:background="@color/green_theme"

android:text="開始悅讀" />

2、fragment_discovery

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:background="@color/greyf3"

tools:context=".main_code.about_fragment.about_discovery.DiscoveryFragment">

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:id="@+id/cardView"

app:cardUseCompatPadding="true"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_gravity="center">

android:id="@+id/viewPager"

android:layout_width="match_parent"

android:layout_height="@dimen/dp400"

android:layout_gravity="center"

android:clipToPadding="false"

android:overScrollMode="never"

android:paddingLeft="@dimen/dp40"

android:paddingRight="@dimen/dp40"

android:paddingStart="@dimen/dp60" />

總結

以上是生活随笔為你收集整理的java切换卡片_CardView之可切换式卡片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 久久橹 | 亚洲最大av在线 | 男人的天堂视频在线观看 | av视屏 | 都市激情亚洲综合 | 深夜视频在线免费观看 | 五月婷婷丁香激情 | 国产精品污污 | 久久伊人操 | 亚洲熟妇丰满大屁股熟妇 | 久久久123| 日日综合网 | 看全黄大色黄大片美女人 | 中文字幕日韩精品在线观看 | 欧美片一区二区 | 人人超碰在线 | 欧美精品一二三区 | 免费拍拍拍网站 | 韩国三级hd中文字幕叫床浴室 | 97热久久 | av777777| 午夜影院试看 | 深夜福利院 | 99re6在线精品视频免费播放 | 你懂的欧美 | 性xxx欧美 | 亚洲激情网 | 毛片一级片 | 亚洲性色视频 | h在线| 欧美mv日韩mv国产网站app | 超碰最新上传 | 婷婷色网| 相亲对象是问题学生在线观看 | 不卡的av在线免费观看 | 国产精品毛片一区二区在线看 | 欧美丰满老妇熟乱xxxxyyy | 综合色小说 | 日本黄色小网站 | 亚洲aⅴ在线 | 秋霞成人网| 中国黄色1级片 | 国产福利免费 | 免费不卡av | 美日韩毛片| 欧美成人手机视频 | 99久久婷婷国产综合精品青牛牛 | 草视频在线观看 | 国产第4页 | 亚洲福利在线播放 | 国产精品高潮呻吟视频 | 91精品国产一区二区三竹菊影视 | 国产精品一区二区三区在线免费观看 | 成年人黄色一级片 | 久久综合伊人77777麻豆 | 色爱五月天 | 少妇一级淫片免费看 | 成人免费大片黄在线播放 | 欧美日韩精品一区二区三区 | 99久久久无码国产精品免费 | 日韩精品在线观看一区二区三区 | 深夜福利视频在线观看 | 亚洲成av人片 | 久久一区视频 | 国产乱子伦一区二区 | 老司机精品在线 | 毛毛毛片| 香蕉国产 | 免费日韩成人 | 性色影院 | 成人亚洲区 | 一二三区中文字幕 | 欧美视频成人 | 三级色网| 日韩av在线第一页 | 人妻丰满熟妇av无码区hd | 日韩一区不卡 | 在线免费91| 欧美三级色图 | 91老司机在线 | 少妇免费直播 | 久久久久国产精品人妻 | 亚洲成人网在线观看 | 国模私拍视频在线 | 岛国av噜噜噜久久久狠狠av | www中文字幕在线观看 | 色偷偷免费费视频在线 | 中文字幕一区二区三区乱码不卡 | 少妇荡乳情欲办公室456视频 | 免费黄av| 欧美欧美欧美 | 亚洲精品午夜国产va久久成人 | 99精品欧美| 国产精品无码一区二区桃花视频 | 91麻豆国产在线观看 | 免费日本特黄 | 欧美乱欲视频 | 欧洲一区二区在线 |