最近为这个事情焦头烂额,原因无他。原来打算是把ViewPager放在WindowManager中,再设定一个定时器,让图片自动切换,但是搞了很久,发现无论如何,这个图片只显示一张。虽然日志看得出来图片确实在切换,但是除了这初始化的这张图片之外,其他的都是黑窗口,也就是没有显示出来。

此路不通,另找出路。其实未必用得着PagerAdapter。安卓就是这点方便,反正View,不管咋整,都是可以往窗口里面放的,我对界面不懂,所以这里也说不出个所以然来。但是这种需求,估计也是有的(比如有些比较恶心的广告程序,就是想要独占最上层,那用windowManager就是比较合适的方式)。

废话不多说,直接上代码

 public class MainActivity extends Activity {
private Runnable viewpagerRunnable;
private Handler MainThreadhandler;
private WindowManager mWndMgr;
private ViewPager mViewPager;
private ImageView mImgView;
private WindowManager.LayoutParams mLayoutParams;
private Context mContext;
private List<ImageView> mImgViewList;
private int[] picRes = {R.drawable.first,R.drawable.second,R.drawable.third};
int CurrentIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this.getApplicationContext();
MainThreadhandler = new Handler();
prepareImageView();
initView();
startAutomaticRoll();
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
} private void prepareImageView(){
mViewPager = new ViewPager(mContext);
mWndMgr = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
mWndMgr.getDefaultDisplay().getMetrics(outMetrics);
mLayoutParams = new WindowManager.LayoutParams();
mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
mLayoutParams.width = outMetrics.widthPixels;
mLayoutParams.height = outMetrics.heightPixels - 150;
//mViewPager.setLayoutParams(mLayoutParams);
mImgViewList = new ArrayList<ImageView>();
int len = picRes.length;
for(int i = 0; i < len ;i++){
ImageView view = new ImageView(mContext);
view.setBackgroundResource(picRes[i]);
mImgViewList.add(view);
}
//mViewPager.setAdapter(new ViewAdapha(mImgViewList));
} public void initView(){
//mWndMgr.addView(mViewPager, mLayoutParams);
mImgView = mImgViewList.get(CurrentIndex);
mImgView.setLayoutParams(mLayoutParams);
mWndMgr.addView(mImgView, mLayoutParams);
//mWndMgr.updateViewLayout(mImgView, mLayoutParams);
} private void startAutomaticRoll() {
viewpagerRunnable = new Runnable() {
@Override
public void run() {
//int nowIndex = mViewPager.getCurrentItem();
//int count = mViewPager.getAdapter().getCount();
if (CurrentIndex + 1 >= 3) {
//mViewPager.setCurrentItem(0);
CurrentIndex = 0;
} else {
CurrentIndex = CurrentIndex + 1;
}
mWndMgr.removeView(mImgView);
mImgView = mImgViewList.get(CurrentIndex);
mImgView.setLayoutParams(mLayoutParams);
//mViewPager.removeAllViews();
Log.i("index", "index="+CurrentIndex);
//mViewPager.removeAllViews();
//mViewPager.addView(mImgViewList.get(CurrentIndex));
mWndMgr.addView(mImgView, mLayoutParams);
//mWndMgr.updateViewLayout(mImgView, mLayoutParams);
MainThreadhandler.postDelayed(viewpagerRunnable, 3000);
}
};
MainThreadhandler.postDelayed(viewpagerRunnable, 3000);
}
}

这种方式比较戳,在图片切换之间,会有闪断的现象,也就是切换的不平滑。如果有知道的朋友,还请指点下是什么情况。或者是如何才能做到在我这种方式下,把ViewPager放到WindowManager里面,再把ImageView数组放在ViewPager里面,然后还能实现正常的切换的效果。

===========================================

又修改了下,效果更好了。哈哈~~~

public class MainActivity extends Activity {
private Runnable viewpagerRunnable;
private Handler MainThreadhandler;
private WindowManager mWndMgr;
private ImageView mImgView;
private WindowManager.LayoutParams mLayoutParams;
private Context mContext;
private List<ImageView> mImgViewList;
private int[] picRes = {R.drawable.first,R.drawable.second,R.drawable.third};
int CurrentIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this.getApplicationContext();
MainThreadhandler = new Handler();
prepareView();
initView();
startAutomaticRoll();
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
} private void prepareView(){
new ViewPager(mContext);
mWndMgr = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
mWndMgr.getDefaultDisplay().getMetrics(outMetrics);
mLayoutParams = new WindowManager.LayoutParams();
mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
mLayoutParams.width = outMetrics.widthPixels;
mLayoutParams.height = outMetrics.heightPixels - 150;
mImgViewList = new ArrayList<ImageView>();
int len = picRes.length;
for(int i = 0; i < len ;i++){
ImageView view = new ImageView(mContext);
view.setBackgroundResource(picRes[i]);
mImgViewList.add(view);
}
} public void initView(){
mImgView = mImgViewList.get(CurrentIndex);
mImgView.setLayoutParams(mLayoutParams);
mWndMgr.addView(mImgView, mLayoutParams);
} private void startAutomaticRoll() {
viewpagerRunnable = new Runnable() {
@Override
public void run() {
if (CurrentIndex + 1 >= 3) {
CurrentIndex = 0;
} else {
CurrentIndex = CurrentIndex + 1;
}
mImgView.setBackgroundResource(picRes[CurrentIndex]);
Log.i("index", "index="+CurrentIndex);
MainThreadhandler.postDelayed(viewpagerRunnable, 3000);
}
};
MainThreadhandler.postDelayed(viewpagerRunnable, 3000);
}
}

  

通过WindowManager图片切换的效果的更多相关文章

  1. JQuery图片切换动画效果

    由于博主我懒,所以页面画的比较粗糙,但是没关系,因为我主要讲的是如何实现图片动画切换. 思路:想必大家都逛过淘宝或者其他的一些网站,一般都会有图片动画切换的效果,那是怎样实现的呢?博主我呢,技术不是很 ...

  2. 自动播放——幻灯片缓冲效果&&带Loading效果的图片切换&&移动效果(按轨迹移动)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. JS图片切换效果

    源地址:http://www.codefans.net/jscss/code/4699.shtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  4. jquery简单的图片切换效果,支持pc端、移动端的banner图片切换开发

    详细内容请点击 无意中看见了两年前写的一个图片切换,那会儿刚刚学习网页制作,可以说是我的第一个处女座的jquery图片切换效果.无聊之余对它的宽度稍稍做了一下修改,变成了支持pc端.手机端全屏的ban ...

  5. 移动web:图片切换(焦点图)

    在web页面上图片切换(焦点图)效果实在是太常见了,PC端.移动端到处都有它的身影. 上次写了个tab选项卡的效果,在这里延续一下,改成图片切换的效果. 如果不需要自动播放,稍微修改下html标签.和 ...

  6. app引导页(背景图片切换加各个页面动画效果)

    前言:不知不觉中又加班到了10点半,整个启动页面做了一天多的时间,一共有三个页面,每个页面都有动画效果,动画效果调试起来麻烦,既要跟ios统一,又要匹配各种不同的手机,然后产品经理还有可能在中途改需求 ...

  7. Android中使用ImageViewSwitcher实现图片切换轮播导航效果

    前面写过了使用ViewFlipper和ViewPager实现屏幕中视图切换的效果(ViewPager未实现轮播)附链接: Android中使用ViewFlipper实现屏幕切换 Android中使用V ...

  8. js鼠标滚轮滚动图片切换效果

    效果体验网址:http://keleyi.com/keleyi/phtml/image/12.htm HTML文件代码: <!DOCTYPE html PUBLIC "-//W3C// ...

  9. javascript马赛克遮罩图片切换效果:XMosaic.js(转)

    新鲜出炉的javascript图片切换特效,实现的是马赛克遮罩切换.在flash里,好实现遮罩动画很简单,不过JS实现起来就有些困难了. XMosaic.js,与XScroll.js和XScroll2 ...

随机推荐

  1. jquery插件的基本写法

    (function($){ var a={name:'2222',age:5555} var b={sex:'男',grade:5555} var c=$.extend({},a,b);//合并到新的 ...

  2. hdu 3478 Catch 二分图染色

    题目链接 题意 小偷逃跑,从某个点出发,每下一个时刻能够跑到与当前点相邻的点. 问是否存在某一个时刻,小偷可能在图中的任意一个点出现. 思路 结论 如果该图为连通图且不为二分图,则可能,否则不可能. ...

  3. 【Visual Studio】error: /ZI”和“/Gy-”命令行选项不兼容(转)

    原文转自 http://bbs.100home.net/view/4206.html [问题说明]vc6项目用vs2015打开时遇到的错误 [解决方法]项目属性->c/c++->常规-&g ...

  4. [Python Cookbook] Numpy Array Manipulation

    1. Reshape: The np.reshape() method will give a new shape to an array without changing its data. Not ...

  5. 专访Nick McKeown:网络领域的游戏颠覆者

    如果要找到一个过去10年在网络领域最热的词汇,那么非SDN(软件定义网络)莫属.在过去的十年间无论是学术机构还是标准组织,无论是电信巨擘还是互联网大厂都成其拥趸. 然而几乎每一件SDN的重大事件都离不 ...

  6. HttpClient的Post请求数据

    最近在项目中需要添加Post请求数据,以前的Get请求是使用JDK自带的URLConnection.在项目组人员的推荐下,开始使用HttpClient. HttpClient简介: HttpClien ...

  7. chm 转 pdf 工具推荐与对比

    在进行推荐chm转pdf的软件之前,首先来了解一下为什么我们要将chm转为pdf. CHM是英语“Compiled Help Manual”的简写,即“已编译的帮助文件”.CHM是微软新一代的帮助文件 ...

  8. Python 实现二维码生成和识别

    今天突然想给自己自己做个头像,然后还是二维码的形式,这样只要扫一扫就可以访问我的主页.然后就开始自己的苦逼之路... 其实实现二维码java,c#,C++等都可以实现:由于自己正在学python,所以 ...

  9. Eclipse 视图

    Eclipse 视图 关于视图 Eclipse视图允许用户以图表形式更直观的查看项目的元数据. 例如,项目导航视图中显示的文件夹和文件图形表示在另外一个编辑窗口中相关的项目和属性视图. Eclipse ...

  10. 直接返回list不封装的结果集

    直接返回list不封装的结果集,在Jsp访问方式: 1.封装成map访问 2.用jstl: <c:forEach var="images" items="${lis ...