1,返回图片名称列表
context.getResources().getAssets().list("image")
2,确认图片名字,拿到bitmap
InputStream inputStream = context.getResources() .getAssets().open("image/" + url); bitmap = BitmapFactory.decodeStream(inputStream);
3,判断是否已存在文件
context.getFileStreamPath(file).isFile()
4,写文件
# 保存的模式: # * 使用context中的文件输出流它有四种模式: # * 文件读写的操作模式: # * Context.MODE_PRIVATE=0:只能是当前的应用才能操作文件 如果创建的文件已经存在 新内容覆盖原内容 # * Context.MODE_APPEND=32768:新内容追加到原内容后 这个模式也是私有的 这个文件只能被创建文件的应用所访问 # * Context.MODE_WORLD_READABLE=1:允许其他应用程序读取本应用创建的文件 # * Context.MODE_WORLD_WRITEABLE=2:允许其他应用程序写入本应用程序创建的文件,会覆盖原数据。 HttpURLConnection conn; try { conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); FileOutputStream output = context.openFileOutput( "filename", Context.MODE_PRIVATE); int ch = 0; int max = 1; byte[] buffer = new byte[max]; while ((ch = is.read(buffer, 0, max)) != -1) { output.write(buffer, 0, ch); } output.close(); is.close();} catch (IOException e) { e.printStackTrace(); Toast.makeText(context, "错误!", Toast.LENGTH_SHORT).show(); }
5,image.mutate()
mutate()方法是让图片资源mutable,内部工作原理应该就是克隆了一份自己。
6,handle 发送消息
mHandler.sendMessage(mHandler.obtainMessage());
7,图片渐变效果实现思路
利用消息机制,递归设置图片的透明度,用一个变量标识是否已经完全显示。
8,handle 消息机制,非UI线程调用
这些handler只要用了default的Looper,他们之间就能通信。
9,图片写文字
public static Bitmap drawTextAtBitmap(Bitmap bitmap, String text) { int x = bitmap.getWidth(); int y = bitmap.getHeight(); // 创建一个和原图同样大小的位图 Bitmap newbit = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(newbit); Paint paint = new Paint(); // 在原始位置0,0插入原图 canvas.drawBitmap(bitmap, 0, 0, paint); paint.setColor(Color.RED); paint.setTextSize(10); // 在原图指定位置写上字 canvas.drawText(text, 2, 20, paint); canvas.save(Canvas.ALL_SAVE_FLAG); // 存储 canvas.restore(); return newbit; }
10,函数反射调用(通过函数名调用)
try { Class cla = Class.forName("com.android.util.AllAndroidMethod"); Object cObject = cla.newInstance(); Method[] methodlist = cla.getDeclaredMethods(); for (Method method : methodlist) { if (method.getName().equalsIgnoreCase(methodNameString)) { Class pts[] = method.getParameterTypes(); Method method2 = cla.getDeclaredMethod(method.getName(), pts); method2.invoke(cObject, arg0, list); method2.invoke(cObject, arg0, arg1, list); method2.invoke(cObject, arg0, arg1); method2.invoke(cObject, arg0); } } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); }
11,基站定位的一点
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int cid = -1; int lac = -1; int nbid = -1; int nbrssi = -1; TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); GsmCellLocation gcl = (GsmCellLocation)tm.getCellLocation(); if(gcl != null) { cid = gcl.getCid(); lac = gcl.getLac(); } NeighboringCellInfo nbinfo = new NeighboringCellInfo(); nbid = nbinfo.getCid(); //获取邻居小区号 nbrssi = nbinfo.getRssi(); //获取邻居小区信号强度 TextView tv = new TextView(this); String str = "CellID = " + cid + ", Lac = " + lac + ", nbid = " + nbid + ", nbrssi = " + nbrssi; tv.setText(str); setContentView(tv); }