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.0 f;
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) ;
}
}