当前位置: 编程技术>移动开发
本页文章导读:
▪设立界面设计 设置界面设计
如何获得用户名的值呢:
// 获得配置参数:用户名 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。。。成功。。这个解释了一切
最新技术文章: