Android广告轮播
16lz
2021-01-26
效果图:
布局:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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" tools:context=".MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="200dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBottom="@id/viewpager" android:background="#33000000" android:orientation="vertical"> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="广告条" android:textColor="@android:color/white" android:textSize="18sp" /> <LinearLayout android:id="@+id/point_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="horizontal">LinearLayout> LinearLayout>RelativeLayout>
指示点:
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="8dp" android:height="8dp" /> <solid android:color="#aaFFFFFF" />shape>
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="8dp" android:height="8dp" /> <solid android:color="#ff0000" />shape>
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/point_focured" android:state_enabled="true" /> <item android:drawable="@drawable/point_normal" />selector>
activity:
package com.example.xyh.banner;import android.os.Handler;import android.os.Message;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * 广告轮播 */public class MainActivity extends AppCompatActivity { private ViewPager mViewPager; private TextView tvTitle; private LinearLayout pointGroup; private List<ImageView> list; // 上一个页面的位置 protected int lastPosition; // 图片资源ID private final int[] imageIds = {R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e}; //图片标题集合 private final String[] title = { "巩俐不低俗,我就不能低俗", "扑树又回来啦!再唱经典老歌引万人大合唱", "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" }; //判断是否在自动滚动 private boolean isRunning = false; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { //让viewPager 滑动到下一页 mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); if (isRunning) { // 继续发送延时2 秒的消息, 形成类似递归的效果, 使广告一直循环切换 mHandler.sendEmptyMessageDelayed(0, 3000); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViews(); init(); initListener(); isRunning = true; mHandler.sendEmptyMessageDelayed(0, 3000); } private void init() { list = new ArrayList<>(); for (int i = 0; i < imageIds.length; i++) { ImageView imageView = new ImageView(this); imageView.setBackgroundResource(imageIds[i]); list.add(imageView); //动态添加指示点 ImageView point = new ImageView(this); point.setBackgroundResource(R.drawable.point_bg); pointGroup.addView(point); //布局参数 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); if (i > 0) { params.leftMargin = 20; } point.setLayoutParams(params); //设置布局参数 if (i == 0) { point.setEnabled(true); } else { point.setEnabled(false); } } MyPagerAdapter myPagerAdapter = new MyPagerAdapter(list); mViewPager.setAdapter(myPagerAdapter); tvTitle.setText(title[0]); //把当前页面设置为中间的,这样左右都有很多页面 mViewPager.setCurrentItem(Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2 % list.size())); } private void initListener() { mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { position = position % list.size(); //设置指示点状态 pointGroup.getChildAt(position).setEnabled(true); pointGroup.getChildAt(lastPosition).setEnabled(false); lastPosition = position; tvTitle.setText(title[position]); } @Override public void onPageScrollStateChanged(int state) { } }); } private void findViews() { mViewPager = (ViewPager) findViewById(R.id.viewpager); tvTitle = (TextView) findViewById(R.id.tv_title); pointGroup = (LinearLayout) findViewById(R.id.point_group); } @Override protected void onDestroy() { super.onDestroy(); isRunning = false; }}
适配器:
package com.example.xyh.banner;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import java.util.List;/** * Created by xiaoyehai on 2018/5/22/022. */public class MyPagerAdapter extends PagerAdapter { private List<ImageView> list; public MyPagerAdapter(List<ImageView> list) { this.list = list; } @Override public int getCount() { //return list.size(); return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = list.get(position % list.size()); container.addView(imageView); //实现按下停止轮播imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: handler.removeCallbacksAndMessages(null); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: handler.removeCallbacksAndMessages(null); handler.sendEmptyMessageDelayed(0,3000); break; } return true; } }); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); object = null; }}
图片轮播也可以采用计时器的方式实现
第三方的图片轮播XBanner
第三方的图片轮播banner
更多相关文章
- android布局layout边框颜色
- 获取Bitmap和对Bitmap的操作工具类
- android双指平移、旋转、缩放控件完美版
- android 图片手势放大缩小
- AsyncTask的使用 (二)图片下载,进度条
- Android关于图片和Base64转码的工具类
- 图片裁剪关于return-data
- android将视频文件转化为图片
- Android中如何移动图片