当前位置: 编程技术>移动开发
本页文章导读:
▪设立界面设计 设置界面设计
如何获得用户名的值呢:
// 获得配置参数:用户名 final String userName = PreferenceManager.getDefaultSharedPreferences( this).getString("user_name", null); AndoridManifest.xml
<activity android:name=.........
▪ 图片圆角、缩放等成效工具类 图片圆角、缩放等效果工具类
public class ImageUtil {
public static InputStream getRequest(String path) throws Exception {
URL url = new URL(/blog_article/path/index.html);
HttpURLConnection conn = (HttpURLConnection) url.op.........
▪ (转)从过程-线程的角度,理解Activity,Service,Broadcast (转)从进程-线程的角度,理解Activity,Service,Broadcast
写下来仅记录下困惑了很久的问题...先说下我以前的错误理解:Service和Broadcast 这两个东西, 我一直认为这个能够脱离Activity的进程。.........
[1]设立界面设计
来源: 互联网 发布时间: 2014-02-18
设置界面设计
如何获得用户名的值呢:
// 获得配置参数:用户名
final String userName = PreferenceManager.getDefaultSharedPreferences(
this).getString("user_name", null);
AndoridManifest.xml
<activity android:name=".view.setting.SetView" > <intent-filter > <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
通过菜单调用:
// 菜单----------------------- public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 1, 0, "设置").setIcon(android.R.drawable.ic_menu_preferences); return super.onCreateOptionsMenu(menu); } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // 设置 case 1: SetView.launch(this); break; default: } return super.onOptionsItemSelected(item); }
设置页面:
package com.lilin.mediaplay.view.setting; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.preference.PreferenceActivity; import com.lilin.mediaplay.R; /** * 设置界面 * * @author lilin * @date 2011-12-13 上午12:06:03 * @ClassName: SettingsActivity */ public class SetView extends PreferenceActivity { public static void launch(Context c) { Intent intent = new Intent(c, SetView.class); c.startActivity(intent); } public void onCreate(Bundle savedInstanceState) { // requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); setContentView(R.layout.setview); setTitle("系统设置"); } }
布局文件:
一个是preferences
<?xml version="1.0" encoding="utf-8"?> <!-- 系统设置界面 --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="常用设置" android:summary="Application settings"> <!-- 编辑框 --> <EditTextPreference android:key="user_name" android:defaultValue="@null" android:title="用户名" android:summary="请设置您的个人用户名" /> <ListPreference android:key="download_format" android:title="下载格式" android:summary="请设置音频下载格式" android:entries="@array/audio_format" android:entryValues="@array/audio_format_values" /> <CheckBoxPreference android:key="wifi_only" android:defaultValue="false" android:title="WIFI设置" android:summary="只有WIFI模式下才联网" /> <CheckBoxPreference android:key="roaming_protection" android:defaultValue="true" android:title="Roaming Protection" android:summary="Disable listening abroad" /> </PreferenceCategory> <PreferenceCategory android:title="其他设置" android:summary="Interaction with outside applications"> <CheckBoxPreference android:key="lastfm_scrobble" android:defaultValue="false" android:title="Last.fm Scrobbling" android:summary="Requires official last.fm client" /> </PreferenceCategory> </PreferenceScreen>
一个是布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#000000" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/setbg_dark" android:gravity="center" android:minHeight="75dip" android:orientation="horizontal" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:minHeight="75dip" android:orientation="horizontal" android:paddingLeft="13dip" android:paddingRight="13dip" > <ImageView android:layout_width="48dip" android:layout_height="48dip" android:src="/blog_article/@drawable/settings/index.html" > </ImageView> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="13dip" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:text="系统设置" android:textColor="#ffffff" android:textSize="18dip" > </TextView> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:textSize="12dip" > </TextView> <TextView android:id="@+id/ItemsCountTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:text=" " android:textColor="#ffffff" android:textSize="12dip" > </TextView> </LinearLayout> </LinearLayout> </LinearLayout> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" > </ListView> </LinearLayout>
数组参数:
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- 音频格式 --> <string-array name="audio_format"> <item>MP3</item> <item>OGG</item> </string-array> <string-array name="audio_format_values"> <item>mp31</item> <item>ogg2</item> </string-array> </resources>
[2] 图片圆角、缩放等成效工具类
来源: 互联网 发布时间: 2014-02-18
图片圆角、缩放等效果工具类
时间工具
public class ImageUtil { public static InputStream getRequest(String path) throws Exception { URL url = new URL(/blog_article/path/index.html); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); if (conn.getResponseCode() == 200){ return conn.getInputStream(); } return null; } public static byte[] readInputStream(InputStream inStream) throws Exception { ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[4096]; int len = 0; while ((len = inStream.read(buffer)) != -1) { outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); return outSteam.toByteArray(); } public static Drawable loadImageFromUrl(/blog_article/String url/index.html){ URL m; InputStream i = null; try { m = new URL(/blog_article/url/index.html); i = (InputStream) m.getContent(); } catch (MalformedURLException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Drawable d = Drawable.createFromStream(i, "src"); return d; } public static Drawable getDrawableFromUrl(/blog_article/String url/index.html) throws Exception{ return Drawable.createFromStream(getRequest(url),null); } public static Bitmap getBitmapFromUrl(/blog_article/String url/index.html) throws Exception{ byte[] bytes = getBytesFromUrl(url); return byteToBitmap(bytes); } public static Bitmap getRoundBitmapFromUrl(/blog_article/String url,int pixels/index.html) throws Exception{ byte[] bytes = getBytesFromUrl(url); Bitmap bitmap = byteToBitmap(bytes); return toRoundCorner(bitmap, pixels); } public static Drawable geRoundDrawableFromUrl(/blog_article/String url,int pixels/index.html) throws Exception{ byte[] bytes = getBytesFromUrl(url); BitmapDrawable bitmapDrawable = (BitmapDrawable)byteToDrawable(bytes); return toRoundCorner(bitmapDrawable, pixels); } public static byte[] getBytesFromUrl(/blog_article/String url/index.html) throws Exception{ return readInputStream(getRequest(url)); } public static Bitmap byteToBitmap(byte[] byteArray){ if(byteArray.length!=0){ return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); } else { return null; } } public static Drawable byteToDrawable(byte[] byteArray){ ByteArrayInputStream ins = new ByteArrayInputStream(byteArray); return Drawable.createFromStream(ins, null); } public static byte[] Bitmap2Bytes(Bitmap bm){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); } public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; } /** * 图片去色,返回灰度图片 * @param bmpOriginal 传入的图片 * @return 去色后的图片 */ public static Bitmap toGrayscale(Bitmap bmpOriginal) { int width, height; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); Canvas c = new Canvas(bmpGrayscale); Paint paint = new Paint(); ColorMatrix cm = new ColorMatrix(); cm.setSaturation(0); ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm); paint.setColorFilter(f); c.drawBitmap(bmpOriginal, 0, 0, paint); return bmpGrayscale; } /** * 去色同时加圆角 * @param bmpOriginal 原图 * @param pixels 圆角弧度 * @return 修改后的图片 */ public static Bitmap toGrayscale(Bitmap bmpOriginal, int pixels) { return toRoundCorner(toGrayscale(bmpOriginal), pixels); } /** * 把图片变成圆角 * @param bitmap 需要修改的图片 * @param pixels 圆角的弧度 * @return 圆角图片 */ public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } /** * 使圆角功能支持BitampDrawable * @param bitmapDrawable * @param pixels * @return */ public static BitmapDrawable toRoundCorner(BitmapDrawable bitmapDrawable, int pixels) { Bitmap bitmap = bitmapDrawable.getBitmap(); bitmapDrawable = new BitmapDrawable(toRoundCorner(bitmap, pixels)); return bitmapDrawable; } }
时间工具
public class TimeUtil { public static String converTime(long timestamp){ long currentSeconds = System.currentTimeMillis()/1000; long timeGap = currentSeconds-timestamp;//与现在时间相差秒数 String timeStr = null; if(timeGap>24*60*60){//1天以上 timeStr = timeGap/(24*60*60)+"天前"; }else if(timeGap>60*60){//1小时-24小时 timeStr = timeGap/(60*60)+"小时前"; }else if(timeGap>60){//1分钟-59分钟 timeStr = timeGap/60+"分钟前"; }else{//1秒钟-59秒钟 timeStr = "刚刚"; } return timeStr; } public static String getStandardTime(long timestamp){ SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日 HH:mm"); Date date = new Date(timestamp*1000); sdf.format(date); return sdf.format(date); } }
[3] (转)从过程-线程的角度,理解Activity,Service,Broadcast
来源: 互联网 发布时间: 2014-02-18
(转)从进程-线程的角度,理解Activity,Service,Broadcast
写下来仅记录下困惑了很久的问题...
先说下我以前的错误理解:
Service和Broadcast 这两个东西, 我一直认为这个能够脱离Activity的进程。
因为这两个东西的外部表现就是你离开利当前的进程(直观表现就是你离开当前应用),这两个东西仍然存在在Android的内存中。
我就想当然的认为既然程序都退出了,Service和Broadcast还没有结束,那么这连个东西肯定是依附在系统进程上。
正确的理解是:
Activity,Service,Broadcast这3个东西不仅在同一个进程中,并且还在同一个线程中。
如果有怀疑的话,可以开一个带有Servie的程序,然后用任务管理器杀死这个Service所在的进程,那么你会发现这个Service在相应的被杀死了.
错误的理解归结一下就是看问题的角度有问题。
以前认为是自己的应用程序去控制Android, 其实不然 应该这样理解:你的整个应用程序的生命周期都是Android在帮助你控制。
Activity是Android帮我们创造的,Service和Broadcast也是Android帮我们创造的。
所以当你离开应用程序的时候,你会认为这个程序所在的进程已经被你杀死了(都是被Windows毒害的)。
其实你这个就涉及到Android中Activity的几种状态:
你能够看见的Activity是激活状态,
你看不见的Activity是暂停状态(简单这么认为吧,其实还有别的状态)。
最后总结一下:
不要用应用程序的角度去理解Android, 要用Android的角度去看待应用程序。
不要在Broadcast和Service运行时间较长的任务,容易卡死程序。如果想运行长时间的任务可以再开启一个线程运行。 不要盲目的认为在Service中运行下载任务就卡不死你的程序了。
====================================
一开始的时候我还好奇。。为什么service里面可以直接更新UI。。。成功。。这个解释了一切
写下来仅记录下困惑了很久的问题...
先说下我以前的错误理解:
Service和Broadcast 这两个东西, 我一直认为这个能够脱离Activity的进程。
因为这两个东西的外部表现就是你离开利当前的进程(直观表现就是你离开当前应用),这两个东西仍然存在在Android的内存中。
我就想当然的认为既然程序都退出了,Service和Broadcast还没有结束,那么这连个东西肯定是依附在系统进程上。
正确的理解是:
Activity,Service,Broadcast这3个东西不仅在同一个进程中,并且还在同一个线程中。
如果有怀疑的话,可以开一个带有Servie的程序,然后用任务管理器杀死这个Service所在的进程,那么你会发现这个Service在相应的被杀死了.
错误的理解归结一下就是看问题的角度有问题。
以前认为是自己的应用程序去控制Android, 其实不然 应该这样理解:你的整个应用程序的生命周期都是Android在帮助你控制。
Activity是Android帮我们创造的,Service和Broadcast也是Android帮我们创造的。
所以当你离开应用程序的时候,你会认为这个程序所在的进程已经被你杀死了(都是被Windows毒害的)。
其实你这个就涉及到Android中Activity的几种状态:
你能够看见的Activity是激活状态,
你看不见的Activity是暂停状态(简单这么认为吧,其实还有别的状态)。
最后总结一下:
不要用应用程序的角度去理解Android, 要用Android的角度去看待应用程序。
不要在Broadcast和Service运行时间较长的任务,容易卡死程序。如果想运行长时间的任务可以再开启一个线程运行。 不要盲目的认为在Service中运行下载任务就卡不死你的程序了。
====================================
一开始的时候我还好奇。。为什么service里面可以直接更新UI。。。成功。。这个解释了一切
最新技术文章: