Android循环广告的实现

3.解决当进入应用position为0时不能向右滑问题

import android.app.Activity;

import android.content.Context;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.os.Bundle;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.MotionEvent;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.Toast;

import java.util.Timer;

import java.util.TimerTask;

public class MainActivity extends Activity implements Runnable {

private static final String TAG = “MainActivity”;

private ViewPager mBanner;

private BannerAdapter mBannerAdapter;

private ImageView[] mIndicators;

private Timer mTimer = new Timer();

private int mBannerPosition = 0;

private final int FAKE_BANNER_SIZE = 100;//传给适配器的条目数

private final int DEFAULT_BANNER_SIZE = 5;//实际的条目的数量

private boolean mIsUserTouched = false;

private int[] mImagesSrc = {//图片资源数组

R.drawable.img1,

R.drawable.img2,

R.drawable.img3,

R.drawable.img4,

R.drawable.img5

};

private TimerTask mTimerTask = new TimerTask() {

@Override

public void run() {

if (!mIsUserTouched) {//判断用户是否用手在滑动viewpager

mBannerPosition = (mBannerPosition + 1) % FAKE_BANNER_SIZE;//通过定时每次位置加1,直到加到100

runOnUiThread(MainActivity.this);//因为MainActivity直接实现了Runnable接口所以直接传MainActivity的对象

Log.d(TAG, “tname:” + Thread.currentThread().getName());

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

mTimer.schedule(mTimerTask, 5000, 5000);//开启定时

}

private void initView() {

mIndicators = new ImageView[] {//加载图片上的小点imageview控件,没个点都是一个imageview

(ImageView)findViewById(R.id.indicator1),

(ImageView)findViewById(R.id.indicator2),

(ImageView)findViewById(R.id.indicator3),

(ImageView)findViewById(R.id.indicator4),

(ImageView)findViewById(R.id.indicator5)

};

mBanner = (ViewPager) findViewById(R.id.banner);

mBannerAdapter = new BannerAdapter(this);

mBanner.setAdapter(mBannerAdapter);

mBanner.setOnPageChangeListener(mBannerAdapter);//设置viewpager的页面改变监听,因为适配器类实现此接口所以传适配器对象

mBanner.setOnTouchListener(new View.OnTouchListener() {//设置viewpager的滑动监听

@Override

public boolean onTouch(View v, MotionEvent event) {

int action = event.getAction();

if (action == MotionEvent.ACTION_DOWN

|| action == MotionEvent.ACTION_MOVE) {

mIsUserTouched = true;

} else if (action == MotionEvent.ACTION_UP) {

mIsUserTouched = false;

}

return false;

}

});

}

private void setIndicator(int position) {

position %= DEFAULT_BANNER_SIZE;

for(ImageView indicator : mIndicators) {

indicator.setImageResource(R.drawable.indicator_unchecked);//设置全部点为未选择状态

}

mIndicators[position].setImageResource(R.drawable.indicator_checked);//根据传过来的position设置为选中状态

}

@Override

public void run() {//定时后要执行的代码

if (mBannerPosition == FAKE_BANNER_SIZE - 1) {

mBanner.setCurrentItem(DEFAULT_BANNER_SIZE - 1, false);//此方法传false时,比如从第五张到第一张会直接跳到第一张,ture时会从第五张快速的按照4,3,2,1的显示。

} else {

mBanner.setCurrentItem(mBannerPosition);

}

}

@Override

protected void onDestroy() {

mTimer.cancel();//取消定时

super.onDestroy();

}

private class BannerAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener {

Android开发除了flutter还有什么是必须掌握的吗?

相信大多数从事Android开发的朋友们越来越发现,找工作越来越难了,面试的要求越来越高了

除了基础扎实的java知识,数据结构算法,设计模式还要求会底层源码,NDK技术,性能调优,还有会些小程序和跨平台,比如说flutter,以思维脑图的方式展示在下图;

加入社区》https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0
roid开发除了flutter还有什么是必须掌握的吗?

相信大多数从事Android开发的朋友们越来越发现,找工作越来越难了,面试的要求越来越高了

除了基础扎实的java知识,数据结构算法,设计模式还要求会底层源码,NDK技术,性能调优,还有会些小程序和跨平台,比如说flutter,以思维脑图的方式展示在下图;

[外链图片转存中…(img-u4JUpqAx-1725711820320)]

加入社区》https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值