Banner轮播图
一、依赖
implementation 'com.youth.banner:banner:1.4.10'
二,布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.youth.banner.Banner
android:id="@+id/ban"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.youth.banner.Banner>
</LinearLayout>
三、Java代码
public class MainActivity extends AppCompatActivity {
ArrayList<Integer> images = new ArrayList<>();
ArrayList<String> titles = new ArrayList<>();
Banner banner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
banner = findViewById(R.id.ban);
images.add(R.drawable._102);
images.add(R.drawable._103);
images.add(R.drawable.xiaolian);
titles.add("图片一");
titles.add("图片二");
titles.add("图片三");
banner.setImages(images);
banner.setImageLoader(new ImageLoadBanner());
banner.setBannerTitles(titles);
banner.setDelayTime(1000);
banner.isAutoPlay(true);
banner.setIndicatorGravity(BannerConfig.CENTER);
banner.setBannerAnimation(Transformer.Stack);
banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);
banner.start();
}
public class ImageLoadBanner extends ImageLoader{
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
imageView.setImageResource(Integer.parseInt(path.toString()));
}
}
}
滑动效果
一、布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:clipChildren="false"
>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="100dp"
android:clipChildren="false"
android:overScrollMode="never"
></android.support.v4.view.ViewPager>
</RelativeLayout>
二、java代码
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.pager);
int[] images = {R.drawable._102,R.drawable._103,R.drawable._102};
ArrayList<ImageView> imageViews = new ArrayList<>();
for (int i = 0;i<images.length;i++){
ImageView imageView = new ImageView(this);
imageView.setImageResource(images[i]);
imageViews.add(imageView);
}
viewPager.setAdapter(new MyAdapter(imageViews));
viewPager.setPageMargin(60);
viewPager.setOffscreenPageLimit(3);
viewPager.setPageTransformer(false,new MyPager());
}
public class MyPager implements ViewPager.PageTransformer{
@Override
public void transformPage(@NonNull View view, float v) {
float flag = 0.0f;
if (v <= flag){
view.setAlpha(1+v);
}else if (v>=flag && v<=1){
view.setAlpha(1-v);
}
}
}
}
三、适配器
public class MyAdapter extends PagerAdapter {
public ArrayList<ImageView> imageViews;
public MyAdapter(ArrayList<ImageView> imageViews) {
this.imageViews = imageViews;
}
@Override
public int getCount() {
return imageViews.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view==o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(imageViews.get(position));
return imageViews.get(position);
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
imageViews.remove(imageViews.get(position));
}
}
回退栈(管理Fragment)
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/fl"
android:layout_weight="9"
android:layout_width="match_parent"
android:layout_height="0dp"></FrameLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp" >
<Button
android:id="@+id/button1"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:text="按钮一"
/>
<Button
android:id="@+id/button2"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:text="按钮二"
/>
</LinearLayout>
<Button
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="模拟返回键"
android:onClick="finishF"
/>
</LinearLayout>
Java代码
public class MainActivity extends AppCompatActivity {
FragmentManager manager;
Button button1;
Button button2;
MyFragment myFragment;
Fragment2 fragment2;
Fragment3 fragment3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
manager = getSupportFragmentManager();
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
myFragment = new MyFragment();
transaction.add(R.id.fl,myFragment);
transaction.addToBackStack("fl1");
transaction.commit();
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction transaction1 = manager.beginTransaction();
transaction1.hide(myFragment);
fragment2 = new Fragment2();
transaction1.add(R.id.fl,fragment2);
transaction1.addToBackStack("fl2");
transaction1.commit();
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction transaction2 = manager.beginTransaction();
transaction2.hide(myFragment);
transaction2.hide(fragment2);
fragment3 = new Fragment3();
transaction2.add(R.id.fl,fragment3);
transaction2.addToBackStack("fl3");
transaction2.commit();
}
});
}
public void finishF(View view){
manager.popBackStackImmediate("fl1",0);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
manager.popBackStackImmediate("fl1",0);
return true;
}
return super.onKeyUp(keyCode, event);
}
}