最近为这个事情焦头烂额,原因无他。原来打算是把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. 什麼是 struct,union,enumeration 的 tag ?

    struct tag { member-list }; union tag { member-list }; enum tag { member-list }; union test1 { int a ...

  2. TextReader 和StreamReader

    TextReader 和StreamReader 目录: 为什么要介绍 TextReader? TextReader的常用属性和方法 TextReader 示例 从StreamReader想到多态 简 ...

  3. hdu 1728(搜索)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. AC日记——绿色通道 codevs 3342

    3342 绿色通道  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description <思远高考绿色通道&g ...

  5. GitHub 上受欢迎的 Android UI Library 整理二

    通知 https://github.com/Tapadoo/Alerter ★2528 - 克服Toast和Snackbar的限制https://github.com/wenmingvs/Notify ...

  6. Codeforces Gym 100203E bits-Equalizer 贪心

    原题链接:http://codeforces.com/gym/100203/attachments/download/1702/statements.pdf 题解 考虑到交换可以减少一次操作,那么可以 ...

  7. GDKOI賽前總結

    @(賽前總結)[GDKOI2017] 提一些比賽時要注意的事項: 賽前先把讀入優化/輸出優化的模板調試好, 加入缺省源中. 注意不要出錯, 輸出為0或者負數的情況要特盤; 讀入輸出文件名不要搞錯; 由 ...

  8. SilverLight-DataBinding:二、Bingding to a Collection Objects(绑定一个集合对象)

    ylbtech-SilverLight-DataBinding: Bingding to a Collection Objects(绑定一个集合对象) 1.A, Building  a Data Ob ...

  9. webpack入门(六)——html-webpack-plugin

    html-webpack-plugin 该插件可以简化创建调用webpack bundles的html文件.在每次编译后,文件名会包含有hash值的bundles 特别有用.你可以让插件为您生成一个H ...

  10. trigger_error

    PHP trigger_error 自定义错误级别抛出错误. //如果设置成notice或warning则程序继续向下执行,如果是致命级别的错误则终止执行 $num1 = 1; if (is_numb ...