基於DreamService的屏保
public class DayDreamService extends DreamService { private final static String TAG = "DayDreamService"; private ViewPager viewPager; private List<ImageView> imageViews; private int currentItem = 0; private MyAdapter pageAdapter; boolean nowAction = false;// 當前使用者正在滑動檢視 String[] fileName = new String[0]; AssetManager manager; private String[] imageUrls=null; private ScheduledExecutorService scheduledExecutorService; ImageLoader imageLoader; @Override public void onAttachedToWindow() { super.onAttachedToWindow(); setInteractive(false); setFullscreen(true); setContentView(R.layout.mydream); configImageLoader(); init(); } //退出的時候幹掉自己哈哈哈哈 @Override public void onDetachedFromWindow(){ super.onDetachedFromWindow(); viewPager = null; manager = null; imageLoader = null; imageViews = null; scheduledExecutorService=null; imageUrls=null; fileName=null; pageAdapter=null; System.exit(0); android.os.Process.killProcess(android.os.Process.myPid()); Log.d(TAG, "onDetachedFromWindow"); } @SuppressLint("HandlerLeak") private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { viewPager.setCurrentItem(currentItem); }; }; //獲取目錄下的圖片的絕對路徑 @SuppressWarnings("finally") public String[] getImageName(Context context, String loc) { String prefix = ""; try { if (loc.equalsIgnoreCase("screen")) { manager = context.getAssets(); fileName = manager.list(loc); prefix = "assets://screen/"; } else { File f = new File(loc); fileName = f.list(); prefix = "file:///data/local/tmp/image/"; } } catch (IOException e) { e.printStackTrace(); } finally { if(fileName!=null){ for (int i = 0; i < fileName.length; i++) { fileName[i] = prefix + fileName[i]; } } return fileName; } } @Override public void onDreamingStarted() { scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); //20秒換一圖 scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 20, 20, TimeUnit.SECONDS); super.onDreamingStarted(); } private class ScrollTask implements Runnable { public void run() { synchronized (viewPager) { if (!nowAction) { System.out.println("currentItem: " + currentItem); currentItem = currentItem + 1; handler.obtainMessage().sendToTarget(); } } } } private class MyPageChangeListener implements OnPageChangeListener { public void onPageSelected(int position) { currentItem = position; } public void onPageScrollStateChanged(int arg0) { if (arg0 == 0) { nowAction = false; } if (arg0 == 1) { nowAction = true; } if (arg0 == 2) { } } public void onPageScrolled(int arg0, float arg1, int arg2) { } } public void init() { //首先獲取/data/local/tmp/image/目錄下的圖片,如果沒有就獲取screen裡的預設圖片 imageUrls = getImageName(this, "/data/local/tmp/image/"); if (imageUrls==null||imageUrls.length==0) { imageUrls = getImageName(this, "screen"); } imageViews = new ArrayList<ImageView>(); for (int i = 0; i < imageUrls.length; i++) { // ImageView imageView = new ImageView(this); ImageView imageView = (ImageView) LayoutInflater.from(this).inflate(R.layout.view_banner, null); ImageLoader.getInstance().displayImage(imageUrls[i], imageView); // imageView.setImageResource(imageResId[i]); imageView.setScaleType(ScaleType.CENTER_CROP); imageViews.add(imageView); } viewPager = (ViewPager) findViewById(R.id.vp); pageAdapter = new MyAdapter(); viewPager.setCurrentItem(Integer.MAX_VALUE / 4); viewPager.setAdapter(pageAdapter); // 切換動畫實現淡入淡出效果 viewPager.setPageTransformer(true, new DepthPageTransformer()); // 設定滑動切換時間 try { Field mScroller = null; mScroller = ViewPager.class.getDeclaredField("mScroller"); mScroller.setAccessible(true); FixedSpeedScroller scroller = new FixedSpeedScroller(viewPager.getContext()); scroller.setScrollDuration(1500); mScroller.set(viewPager, scroller); } catch (NoSuchFieldException e) { } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } viewPager.setOnPageChangeListener(new MyPageChangeListener()); } //ViewPager的Adapter private class MyAdapter extends PagerAdapter { @Override public int getCount() { //定義一個極大的數,實現偽無線迴圈 return Integer.MAX_VALUE / 2; } @Override public Object instantiateItem(View arg0, int position) { View view = null; if (position % imageViews.size() < 0) { view = imageViews.get(imageViews.size() + position); } else { view = imageViews.get(position % imageViews.size()); } ViewParent vp = view.getParent(); if (vp != null) { ViewGroup parent = (ViewGroup) vp; parent.removeView(view); } ((ViewPager) arg0).addView(view); return view; } @Override public void destroyItem(View arg0, int arg1, Object arg2) { } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } } //configImageLoader框架,用來管理和處理圖片 private void configImageLoader() { // 初始化ImageLoader @SuppressWarnings("deprecation") DisplayImageOptions options = new DisplayImageOptions.Builder().showStubImage(R.drawable.ic_launcher) // 設定圖片下載期間顯示的圖片 // .showImageForEmptyUri(R.drawable.ic_launcher) // // 設定圖片Uri為空或是錯誤的時候顯示的圖片 .showImageOnFail(R.drawable.icon) // 設定圖片載入或解碼過程中發生錯誤顯示的圖片 .bitmapConfig(Bitmap.Config.RGB_565) // 圖片太多的時候設定 ,避免記憶體溢位和解碼失敗 //.cacheInMemory(true) // 設定下載的圖片是否快取在記憶體中 //.cacheOnDisc(true) // 設定下載的圖片是否快取在SD卡中 // .displayer(new RoundedBitmapDisplayer(20)) // 設定成圓角圖片 .build(); // 建立配置過得DisplayImageOption物件 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) .defaultDisplayImageOptions(options).threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory().discCacheFileNameGenerator(new Md5FileNameGenerator()) .tasksProcessingOrder(QueueProcessingType.LIFO).build(); ImageLoader.getInstance().init(config); } }
其中有幾個工具類
/** * 自定義高度的viewpapger */ public class BaseViewPager extends ViewPager { private boolean scrollable = true; public BaseViewPager(Context context) { super(context); } public BaseViewPager(Context context, AttributeSet attrs) { super(context, attrs); } /** * 設定viewpager是否可以滾動 * * @param enable */ public void setScrollable(boolean enable) { scrollable = enable; } @Override public boolean onInterceptTouchEvent(MotionEvent event) { if (scrollable) { return super.onInterceptTouchEvent(event); } else { return false; } } }
/** * 自定義的淡入淡出效果 */ public class DepthPageTransformer implements BaseViewPager.PageTransformer { private static final float MIN_ALPHA = 0.0f; //最小透明度 @SuppressLint("NewApi") public void transformPage(View view, float position) { int pageWidth = view.getWidth(); //得到view寬 if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. 出了左邊螢幕 view.setAlpha(0); } else if (position <= 1) { // [-1,1] if (position < 0) { //消失的頁面 view.setTranslationX(-pageWidth * position); //阻止消失頁面的滑動 } else { //出現的頁面 view.setTranslationX(pageWidth); //直接設定出現的頁面到底 view.setTranslationX(-pageWidth * position); //阻止出現頁面的滑動 } // Fade the page relative to its size. float alphaFactor = Math.max(MIN_ALPHA, 1 - Math.abs(position)); //透明度改變Log view.setAlpha(alphaFactor); } else { // (1,+Infinity] // This page is way off-screen to the right. 出了右邊螢幕 view.setAlpha(0); } } }
/**
* 自定義的Scroller
*/
public class FixedSpeedScroller extends Scroller {
private int mDuration = 1000;
public void setScrollDuration(int duration){
this.mDuration = duration;
}
public FixedSpeedScroller(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
public void setmDuration(int time) {
mDuration = time;
}
public int getmDuration() {
return mDuration;
}
}
相關推薦
基於DreamService的屏保
public class DayDreamService extends DreamService { private final static String TAG = "DayDreamService"; private ViewPager viewPager; private List<I
關於前端Retina 屏幕兼容和基於Retina 屏幕兼容的雪碧圖技巧
com 兩張 include 很好 做的 log 項目 only alt 由於蘋果電腦的普及,所以Retina 屏幕兼容越來越重要,在普通屏幕上正常的背景,在Retina 屏幕上都會發虛。 首先新建一個scss文件,起名為utils.scss ,在文件中寫入下面代碼: /*
directx截屏保存bmp文件
n) 截屏保存 tde eas har size ron ted dev #include <d3d9.h> #include <D3dx9tex.h> #pragma comment(lib, "D3D9.lib") #pragma
Python-Tkinter-屏保
lambda表達式 port 運動 create 位置 個數 elf 顏色 over - 屏保可以自己啟動,也可以手動啟動 (這裏使用手動啟動)- 一旦移動鼠標後,或者其他的引發事件,則停止- 如果屏保是一個畫布的話,則沒有畫框- 圖像的動作是隨機的,具有隨機性,可能包括顏
python實現屏保計時器
speed hide 晶體管 oca 時間 trace while 初學 else 什麽都不說先上圖吧,Python 初學者實現屏保計時器 原理:利用 Python turtle 庫實現快速畫圖,每隔一秒鐘擦除屏幕,然後獲得電腦實時時間,再次畫圖,呈現動態時間。 關於數字
Win10檢視屏保的儲存位置
對於喜歡的Win10屏保分為兩種:一種是本機自帶的儲存位置在C:\Windows\Web; 還有一種就是Win10每天下載的則是在 C:\Users\%username%\AppData\Local\Packages\Microsoft.Windows.Cont
閒來無事,做個程式碼雨屏保
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="css/ok.
安裝屏保軟體(Linux終端演示 “黑客帝國” 字母雨介面)和Linux修改管理員密碼
1.Linux修改管理員密碼:開啟終端:1. 重啟 reboot 2.進入核心登陸系統點選e3.進入系統救援介面,定位Linux16所在行,找到ro 後刪除,在此位置新增一條命令: rw init=/sysroot/bin/bash 4.點選Ctrl + x進入核心編輯
安裝屏保軟件(Linux終端演示 “黑客帝國” 字母雨界面)和Linux修改管理員密碼
一次 9.png color 系統救援 lan 解壓 下載 lin 風格 1.Linux修改管理員密碼:打開終端:1. 重啟 reboot 2.進入內核登陸系統點擊e3.進入系統救援界面,定位Linux16所在行,找到ro 後刪除,在此位置添加一條命令: rw i
5.1 設定圖片互動屏保後,顯示藍色圖片
Log顯示是 01-21 20:42:56.519 1361 1410 D skia : --- SkImageDecoder::Factory returned null 01-21 20:42:56.519 1361 1410 W System.err:
Java小球動態屏保程式的製作
一、首先建立包ball,然後建立模板類BallModel BallModel類程式碼如下 : package ball; import java.awt.Color; import java.awt.
python tkinter 屏保
第一次用python寫的小程式,記錄下。 需求: 屏保可以自己啟動,也可以手動啟動 一旦敲擊鍵盤或者移動滑鼠後,或者其他的引發時間,則停止 如果屏保是一幅畫的話,則沒有畫框 影象的動作是隨機的,具有隨機性,可能包括顏色,大小,多少, 運動方向,變形等 整個世界
9行python程式碼批量修改window屏保圖檔案
前言 最近看到window10開機桌布特別好看,想去儲存下來,查到其原始檔的路徑如下: C:\Users\JackPi\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\As
用python編寫一個屏保程式(背單詞)
大家好,我是一名即將畢業的大學生,第一次在CSDN上發表文章,之前在其他的部落格上也寫過,但是總的來說,這個平臺的資源要多一些(個人覺得),所以有很多不懂的地方希望大家多多指教。 今天我要給大家分享的是一款自己寫的屏保程式,大學嘛大家最頭疼的就是四六級的考試了,上次考試做閱讀的時候,情不
Python實戰:利用Tkinter實現屏保程式
利用Tkinter實現綵球碰撞屏保 一、架構與思路 (1)主函式: main():通過類啟動程式; (2)類: ScreenSaver():用於定義屏保和主畫布,呼叫球建立、運動等函式; RandomBall():定義球的基本屬性、球建立與運動
tkinter 製作屏保
import random import tkinter class RandomBall(): ''' 定義球的類 ''' def __init__(self, canvas, scrnwidth, scrnheight): #canva
c#屏保1(繞著螢幕跑)
運動軌跡 程式碼:四個timer實現: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using
c#屏保2(斜著跑)
窗口裡添加個一個label; 程式碼:一個timer實現 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawin
Centos屏保特效
生成動畫: 1.安裝epel源CENTOS6/7根據系統二選一 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo wget -O /etc/yum.repos.d/epel.repo h
CentOS關閉休眠和屏保模式
轉載: https://blog.csdn.net/zhongbeida_xue/article/details/51613615因為X的螢幕保護,電源管理機制跟gnome不一樣。所以無法使用對gnome的一套工具進行設定。所幸發現了名為xset的小工具xset程式主要對啟動