设置自动更换主界面背景
2013-12-15 13:43
225 查看
最近做毕业设计,做一个个人备忘录,想实现这样一个功能:就是可以在设置界面有一个选项,点击自动更换主界面背景,回到主界面,每过10秒更换界面,如果再点击就是关闭自动更换主界面背景。
设置界面关键代码:
String.xml中相关代码:
接下来就是在设置程序setting.java中找到自动更换界面的按钮,代码如下:
http://blog.csdn.net/nihaoqiulinhe/article/details/17333439
设置界面关键代码:
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory> <CheckBoxPreference android:defaultValue="true" android:key="@string/auto_huanfu_pifu_key" android:summaryOff="@string/auto_update_switch_summary_off" android:summaryOn="@string/auto_update_switch_summary_on" android:title="@string/auto_huanfu_switch_title" > </CheckBoxPreference> </PreferenceCategory> </PreferenceScreen>
String.xml中相关代码:
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- 设置自动更换皮肤 --> <string name="auto_huanfu_setting">自动更换皮肤设置</string> <string name="auto_huanfu_switch_title">自动更换皮肤</string> <string name="auto_huanfu_pifu_key">auto_huanfu_pifu_key</string> <string name="auto_huanfu_switch_summary_on">开启自动更换皮肤</string> <string name="auto_huanfu_switch_summary_off">关闭自动更换皮肤</string> </resources>
接下来就是在设置程序setting.java中找到自动更换界面的按钮,代码如下:
/* * 设置界面 */ package com.note; import java.io.File; import android.content.ContentValues; import android.content.Intent; import android.content.SharedPreferences; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.view.KeyEvent; import android.widget.Toast; //继承PreferenceActivity,并实现OnPreferenceChangeListener和OnPreferenceClickListener监听接口 public class Settings extends PreferenceActivity implements OnPreferenceClickListener, OnPreferenceChangeListener { SharedPreferences preferences; SharedPreferences.Editor editor; Boolean bo; // 定义相关变量 String huanfu_key; CheckBoxPreference huanfuswitch; @SuppressWarnings("deprecation") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 从xml文件中添加Preference项 addPreferencesFromResource(R.xml.preferencesii); editor = preferences.edit(); bo = true; // 设置自动换肤 huanfu_key = getResources().getString(R.string.auto_huanfu_pifu_key); huanfuswitch = (CheckBoxPreference) findPreference(huanfu_key); huanfuswitch.setOnPreferenceClickListener(this); huanfuswitch.setOnPreferenceChangeListener(this); } public boolean onPreferenceClick(Preference preference) { return true; } public boolean onPreferenceChange(Preference preference, Object newValue) { // 判断是哪个Preference改变了 if (preference.getKey().equals(updateSwitchKey)) { System.out.println("checkbox preference 值改变了"); } else if (preference.getKey().equals(updateFrequencyKey)) { String tixing = (String) newValue;// 重复方式变量 int num = Integer.parseInt(tixing); System.out.println(num + "的值"); // 重复方式用户选择了定点 if (num == 1) { System.out.println("用户选择了定点的重复方式"); } // 重复提醒方式用户选择了每天 if (num == 2) { System.out.println("用户选择了每天的重复方式"); } // 重复方式用户选择了每周 else if (num == 3) { System.out.println("用户选择了每周的重复方式"); } // 重复提醒方式用户选择了每月 else if (num == 4) { System.out.println("用户选择了每月的重复方式"); } // 重复方式用户选择了单双周 else if (num == 5) { System.out.println("用户选择了单双周的重复方式"); } // 重复方式用户选择了定制 else if (num == 6) { System.out.println("用户选择了定制的重复方式"); } System.out.println(num + "获取用户点击的值"); System.out.println("list preference 值改变了"); } else if (preference.getKey().equals(alerttype_key)) { String tixing1 = (String) newValue;// 最新的提醒方式变量 int num1 = Integer.parseInt(tixing1);// 转化成数字类型 // 用SharedPreferences保存这个提醒方式变量,以使得在Alarm.java能够获取到该变量 editor.putInt("num1", num1); editor.commit(); // 根据用户选择的提醒方式,更新数据库note相应字段跳转到Alarm.java页面以设置提醒方式 SqliteDBConnect sd = new SqliteDBConnect(Settings.this); SQLiteDatabase sdb = sd.getReadableDatabase();// 取得SQLiteDatabase数据库实例 // sdb.execSQL("create table note(noteId Integer primary key,noteName varchar(20),noteTime varchar(20),noteContent varchar(400),noteType Integer)"); ContentValues values = new ContentValues(); values.put("noteType", num1); sdb.update("note", values, null, null); // 提醒方式用户选择了定点 if (num1 == 1) { System.out.println("用户选择了振动的提醒方式"); } else if (num1 == 2) { System.out.println("用户选择了铃声的提醒方式"); } else if (num1 == 3) { System.out.println("用户选择了振动和铃声的提醒方式"); } // c1.close(); sdb.close(); System.out.println("list preference 值改变了"); } else if (preference.getKey().equals(huanfu_key)) { bo = (Boolean) newValue; System.out.println("测试自动更换皮肤会得到的新的值" + bo); } else { // 如果返回false表示不允许被改变 return false; } // 返回true表示允许改变 return true; } public boolean onKeyDown(int keyCode, KeyEvent event) { // if (keyCode == KeyEvent.KEYCODE_BACK) { //preferences = getSharedPreferences("bo", MODE_WORLD_WRITEABLE); //bo=preferences.getBoolean("bo", true); Intent intent = getIntent(); Bundle bundle = new Bundle(); bundle.putBoolean("bo", bo); System.out.println("得到用户设置的皮肤变量"+bo); intent.putExtras(bundle); intent.setClass(Settings.this,MainShow.class); setResult(11, intent); finish(); return false; } else { return super.onKeyDown(keyCode, event); } } }上述代码主要获得用户选择的boolean,如果是true则启动自动更换界面,把这个值传给主界面MainShow.java里,接下来在主界面就要获得这个值,并启动定时器每隔10秒更换界面,如果是禁止自动更换界面,就停止定时器,代码如下:
/* * 用户启动该软件的主界面,显示从数据库查找的记录,可以点击首页或者末页,也可以点击前后页。 * * */ package com.note; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Timer; import java.util.TimerTask; import com.note.Settings; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlarmManager; import android.app.AlertDialog; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.BitmapFactory; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.MediaStore.Images.Media; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.SimpleAdapter; import android.widget.Toast; @SuppressLint("HandlerLeak") public class MainShow extends Activity { SharedPreferences preferences; SharedPreferences.Editor editor; ArrayList<String> names = new ArrayList<String>(); ArrayList<String> descs = new ArrayList<String>(); ArrayList<String> fileNames = new ArrayList<String>(); // 声明通知管理器 private NotificationManager notificationManager = null; private Intent intent = null; private PendingIntent pendingIntent = null; // 声明Notification对象 private Notification notification = null; boolean isExit; // 判断用户是否要按两次返回键进行退出 private ListView lv;// 列表view private SqliteDBConnect sd;// SqliteDBConnect是一个用来操作SQLiteDatabase辅助类 private static int page_size = 7;// 一页只能显示7个记录 private static int page_no = 1, page_count = 0, count = 0;// 标记首页或者末页的变量、默认显示一行记录、总共有几页记录、最大记录数 private Button btnshezhi, btnChangeSkin, btnAdd, btnFirst, btnEnd, btnyaoyiyao, btnGuang; // 分别指添加记事按钮、首页按钮、末页按钮 private ImageButton btnNext, btnPre;// 分别指上一页图片按钮、下一页图片按钮 private SimpleAdapter sa; private ProgressBar m_ProgressBar; private ActivityManager1 am;// 自定义Activity管理工具类 private RelativeLayout relalayout; PendingIntent pi;// 可以理解为延迟执行的intent,PendingIntent是对Intent一个包装 AlarmManager alm; // 系统主界面进行自动换肤的四张图片 int[] huanfuid = new int[] { R.drawable.huanfu1, R.drawable.huanfu2, R.drawable.huanfu3, R.drawable.huanfu4 }; int currentpifu = 0;// 使图片能循环显示 Boolean huanfu;//标识是否启动自动换肤 private int year, month, day, hours, minute, second;// 年月日,小时分和秒的定义 private Calendar c;// 日历 Handler handler; Timer timer; TimerTask task; @SuppressWarnings("unchecked") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setProgressBarVisibility(true); // 设置进度条可见 setContentView(R.layout.mainshow); huanfu=true; preferences = getSharedPreferences("zidonghuanfu", MODE_PRIVATE); c = Calendar.getInstance(); year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH); day = c.get(Calendar.DAY_OF_MONTH); hours = c.get(Calendar.HOUR_OF_DAY); // System.out.println(hours+"原来的值为24进制的数,所以要修改"); minute = c.get(Calendar.MINUTE); second = c.get(Calendar.SECOND); // 找到主界面的id,为后续换背景做准备 relalayout = (RelativeLayout) findViewById(R.id.relalayout); relalayout.setBackgroundResource(huanfuid[0]); // 初始化NotificationManager对象 notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // 点击通知时转移内容 intent = new Intent(getApplicationContext(), MainShow.class); // 主要设置点击通知的时显示内容的类 pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0); // 构造Notification对象 notification = new Notification(); // 删除之前定义的通知,(通知用户该软件正在后台运行) // 启动后删除之前我们定义的通知 NotificationManager notificationManager = (NotificationManager) this .getSystemService(NOTIFICATION_SERVICE); notificationManager.cancel(0); // 禁止输入法自动弹出 getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); am = ActivityManager1.getInstance(); // 获得ActivityManager的实例 am.addActivity(this);// 添加Activity到ActivityManager里面 alm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); btnshezhi = (Button) findViewById(R.id.btnSheZhi);// 设置按钮 btnChangeSkin = (Button) findViewById(R.id.btnChangeSkin);// 点击换肤 btnyaoyiyao = (Button) findViewById(R.id.btnyaoyiyao); btnGuang = (Button) findViewById(R.id.btnGuang); btnAdd = (Button) findViewById(R.id.btnAdd); // 添加记录按钮 btnFirst = (Button) findViewById(R.id.btnFirst); // 首页按钮 btnPre = (ImageButton) findViewById(R.id.btnPre);// 上一页按钮 btnNext = (ImageButton) findViewById(R.id.btnNext);// 下一页按钮 btnEnd = (Button) findViewById(R.id.btnEnd);// 末页按钮 m_ProgressBar = (ProgressBar) findViewById(R.id.progressBar); m_ProgressBar.setIndeterminate(false);// ProgressBar // 设置成”indeterminate”// // 模式,此时进度条可以显示一个不断转动的滚轮或是一个水平的进度条。 lv = (ListView) findViewById(R.id.listview); sd = new SqliteDBConnect(MainShow.this); fenye();// 分页显示记录方法 // 当用户点击记录列表项,激发该事件 lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Map<String, Object> map = (Map<String, Object>) arg0 .getItemAtPosition(arg2); // 进入显示具体记事内容的界面 Look.java Intent intent = new Intent(); intent.putExtra("noteId", map.get("noteId").toString()); intent.setClass(MainShow.this, Look.class); startActivity(intent); } }); // 当用户长按某个记录项时,激发该事件 lv.setOnItemLongClickListener(new OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { final Map<String, Object> map = (Map<String, Object>) arg0 .getItemAtPosition(arg2); AlertDialog.Builder adb = new Builder(MainShow.this); adb.setTitle(map.get("noteName").toString()); adb.setItems(new String[] { "删 除", "修 改" }, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: SQLiteDatabase sdb = sd .getReadableDatabase(); sdb.delete("note", "noteId=?", new String[] { map.get("noteId") .toString() }); Toast.makeText(MainShow.this, "删除成功", Toast.LENGTH_SHORT).show(); sdb.close(); fenye(); break; case 1: // 当用户选择了修改选项功能项时,启动Update的界面 Intent intent = new Intent(); intent.putExtra("noteId", map.get("noteId") .toString()); intent.setClass(MainShow.this, Update.class); startActivity(intent); break; } } }); adb.show(); return false; } }); btnshezhi.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainShow.this, Settings.class); //startActivity(intent); startActivityForResult(intent, 2); } }); // 为摇一摇按钮注册事件监听器 btnyaoyiyao.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainShow.this, SensorTestActivity.class); startActivity(intent); } }); // 为光传感器事件添加事件监听器 btnGuang.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainShow.this, guangchuanganqiSersor.class); startActivity(intent); } }); // 为添加按钮注册事件监听器 btnAdd.setOnClickListener(new OnClickListener() { public void onClick(View v) { m_ProgressBar.setVisibility(View.VISIBLE); m_ProgressBar.setProgress(0); Intent intent = new Intent(); intent.setClass(MainShow.this, ActivityMain.class); startActivity(intent); } }); btnFirst.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (page_no == 1) { Toast.makeText(MainShow.this, "已经是首页了", Toast.LENGTH_SHORT) .show(); } else { page_no = 1; } fenye(); } }); btnNext.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (page_no == page_count) { Toast.makeText(MainShow.this, "已经是末页了", Toast.LENGTH_SHORT) .show(); } else { page_no += 1; } fenye(); } }); btnPre.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (page_no == 1) { Toast.makeText(MainShow.this, "已经是首页了", Toast.LENGTH_SHORT) .show(); } else { page_no -= 1; } fenye(); } }); btnEnd.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (page_no == page_count) { Toast.makeText(MainShow.this, "已经是末页了", Toast.LENGTH_SHORT) .show(); } else { page_no = page_count; } fenye(); } }); } // 换肤按钮添加点击事件 public void setbackground(View view) { Intent intent = new Intent(this, ImageGallery.class); startActivityForResult(intent, 1); } // 从sd中选中图片,设置为背景 @SuppressWarnings("deprecation") protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == 12) { Bundle bundle = data.getExtras(); String url = bundle.getString("url"); Uri uri = Uri.parse(url); relalayout.setBackgroundDrawable(Drawable.createFromPath(uri .getPath())); }else if (requestCode == 2 && resultCode == 11) { Bundle bundle = data.getExtras(); huanfu = bundle.getBoolean("bo"); System.out.println("测试是否执行该句的得到换肤数据"+huanfu); if(huanfu == true){ // 定时更换主界面Mainshow.java的背景 handler = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 1) { relalayout.setBackgroundResource(huanfuid[currentpifu++% huanfuid.length]); } } }; timer = new Timer(true); // 任务 task = new TimerTask() { public void run() { Message msg = new Message(); msg.what = 1; handler.sendMessage(msg); } }; // 启动定时器,每隔10秒更换背景 timer.schedule(task, 0, 1 * 10 * 1000); //relalayout.setBackgroundResource(huanfuid[2]); } else if(huanfu == false){
//消除定时器 handler.removeCallbacksAndMessages(null); if (task != null) { task.cancel(); task = null; } if (timer != null) { timer.cancel(); timer.purge(); timer = null; } relalayout.setBackgroundResource(huanfuid[3]); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 1, 1, "设置铃声"); menu.add(0, 2, 2, "退出"); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { // 转到闹钟view case 1: Intent intent = new Intent(); intent.setClass(MainShow.this, SetAlarm.class); startActivity(intent); break; case 2: AlertDialog.Builder adb2 = new Builder(MainShow.this); adb2.setTitle("消息"); adb2.setMessage("真的要退出吗?"); adb2.setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // am.exitAllProgress(); // 杀死所有进程 Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); // System.exit(0); // android.os.Process.killProcess(android.os.Process.myPid()); } }); adb2.setNegativeButton("取消", null); adb2.show(); break; default: break; } return super.onMenuItemSelected(featureId, item); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // if (keyCode == KeyEvent.KEYCODE_BACK) { exit(); return false; } else { return super.onKeyDown(keyCode, event); } } Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); isExit = false; } }; }其他功能的代码块,读者可以删除掉,这里我就不删除了,请高手指教,谢谢。转载请注明出处:
http://blog.csdn.net/nihaoqiulinhe/article/details/17333439
相关文章推荐
- win7系统怎么设置电脑背景自动更换?
- windows7系统设置自动更换桌面背景的操作步骤
- windows7如何设置自动更换漂亮的桌面背景?
- css——如何让一段文字自动换行,并且左对齐,设置背景透明
- eclipse自动提示+自动补全+字体大小+背景颜色设置
- Win8自动更换桌面背景无需借助第三方软件
- Android绑定EditText自动弹出自定义软键盘不同按键设置不同背景的实现(自动向上顶适应布局)
- wince6.0桌面背景+设置默认IP+开机自动运行程序
- 自动生成TabHost,TabHost背景颜色设置
- linux下的flubox, kde自动设置桌面背景图片为指定目录下的随机图片
- Next主题个性化之自动更换背景图片
- 【开源程序(C++)】获取bing图片并自动设置为电脑桌面背景
- Win7电脑怎么设置自动更换壁纸主题不想手动更换
- android view重写onTouchEvent事件更换背景(android 动态设置背景图 )
- 更换SAP主界面右边区域背景主题
- 设置背景图片自动适应屏幕
- 自定义制作 自动定时更换图片的桌面背景 html页面
- 更换SAP主界面右边的背景
- jquery动态更换设置背景图
- eclipse设置字体、背景(豆绿)色、自动提示