最近做项目要做广告位的展示,所以就简单的做了这个小项目。
代码很简单:
1、实现功能代码:
package com.my.zx;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ViewSwitcher.ViewFactory;
/**
*
* @author bravo_lover@sina.com
*
*/
public class zx extends Activity {
/** Called when the activity is first created. */
private Context mActivity;
private Timer adTimer;
private AdTimerTask adTask;
private Timer hideTimer ;
private HideTimerTask hideTask;
private static final Integer[] imagelist = { R.drawable.new_home_normal, R.drawable.new_rank_normal,
R.drawable.new_user_normal, R.drawable.new_search_normal, R.drawable.new_manage_normal};
private ImageSwitcher m_Switcher;
private Button next, pre ;
private static int index = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mActivity = this;
initAd();
hideTimer = new Timer(true);
adTimer = new Timer(true);//广告的
hideBtn();
}
private void initAd() {
m_Switcher = (ImageSwitcher) findViewById(R.id.imageswitcher);
m_Switcher.setFactory(new ViewFactoryImpl());
m_Switcher.setOnTouchListener(new mSwitcherOnTouchListener());
m_Switcher.setImageResource(imagelist[index]);
// 因为要旋转所以我们需要保存视图的缓存信息
m_Switcher.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);
next = (Button) findViewById(R.id.next);//下一张
next.setOnClickListener(new OnClickListener() {
// 从右拖到左,即看后一张
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
btnNext();
}
});
pre = (Button) findViewById(R.id.pre);
pre.setOnClickListener(new OnClickListener() {
//从左拖到右,看前一张
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
btnPre();
}
});
}
private class ViewFactoryImpl implements ViewFactory {
@Override
public View makeView() {
// TODO Auto-generated method stub
// 实例化图片显示
ImageView img = new ImageView(mActivity);
// 设置背景颜色
img.setBackgroundColor(0xFFFFFFFF);
// 居中显示
img.setScaleType(ImageView.ScaleType.CENTER);
// 自适应图片大小
//image.setMinimumHeight(200);
//image.setMinimumWidth(200);
img.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); // 定义组件
return img;
}
}
class mSwitcherOnTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
pre.setVisibility(View.VISIBLE);
next.setVisibility(View.VISIBLE);
if (adTimer != null) {
if (adTask != null) {
adTask.cancel();
}
}
break;
case MotionEvent.ACTION_UP:
hideBtn();
break;
default :
break;
}
return true;
}
}
private void hideBtn() {
if (hideTimer != null){
if (hideTask != null){
hideTask.cancel(); //将原任务从队列中移除
}
}
hideTask = new HideTimerTask();
hideTimer.schedule(hideTask, 3000);
}
private void cancelAdTask() {
adTask = new AdTimerTask();
adTimer.schedule(adTask, 3000, 3000);
}
class HideTimerTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
}
Handler handler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
pre.setVisibility(View.GONE);
next.setVisibility(View.GONE);
cancelAdTask();
break;
case 2:
//广告页刷新
btnNext();
default:
break;
}
};
};
class AdTimerTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
Message message = new Message();
message.what = 2;
handler.sendMessage(message);
}
}
private void btnNext() {
index++;
if (index >= imagelist.length) {
index = 0;
}
m_Switcher.setImageResource(imagelist[index]);
}
private void btnPre() {
index--;
if (index < 0) {
index = imagelist.length - 1;
}
m_Switcher.setImageResource(imagelist[index]);
}
}
2、布局main.xml
如上就是全部代码:这里要写几点注意的地方:
1、FrameLayout布局中,谁在底部,就先布局谁。
2、定时器Timer,我遇到了java.lang.IllegalStateException: TimerTask is scheduled already。这个错误,这是由于每个TimerTask只能被schedule一次,第二次会抛出异常。
3、hideTimer.schedule(hideTask, 3000); 和 adTimer.schedule(adTask, 3000, 3000);的区别
第一种是:没有设置延迟,也就是立即执行,以后每3000秒执行一次,相当于schedule(adTask, 0, 3000)
第二种是:延迟3000秒之后执行,以后每3000秒执行一次.
源代码地址:源文件下载地址