android統計圖
① 做Android 開發怎麼選擇手機
做Android開發選擇手機時,主要從原生性、版本號、屏幕適配三方面考慮。
1. 原生性
原生Android系統是指Google公司發布,沒有經過第三方修改的安卓系統。由於Android是開源系統,所以,有的廠商在引入時,會修改其框架層的源碼以適應當地的市場或者定製自己的專屬功能。顯然,經第三方修改過的安卓系統,不再保證原生安卓的普適性,所以在開發時,可能會出現一些未知的BUG。因而,有條件的情況下,建議盡量選擇谷歌Nexus系列的手機(設備)進行初期版本的開發測試,以保證最大的兼容性。
2. 版本號
Android版本號是不同時期發布的的Android系統版本編號,對用戶而言,它限制了Android的功能特性,對開發者而言,它限制了Android編程介面的種類和數量。由於安卓版本號眾多(截止2016年9月,最新的Android正式版本是7.0),各地區的迭代周期不一,導致搭載不同Android版本的設備分布很不均勻,這就是安卓版本的「碎片化」。
不過,Android各版本之間並不是完全獨立,而是向後兼容的,也就是說,保證低版本的特性在高版本上也能實現,但是不保證高版本的特性可以在低版本上展示。因而,開發者選擇的測試設備搭載的Android版本越低,其開發的應用兼容性就越強。可是實際開發中,不能單一考慮兼容性,還要考慮市場因素。兼容太低版本的設備會極大地限制Android新特性的體現,降低趣味性與互動性,而且還會增加維護成本。
如下圖是谷歌對Android版本號的分布統計圖(截止到2016年5月),可以看到,低於Android 4.0版本號的設備市場佔有率已經少於3%,所以,建議Android開發者在選擇手機時最低兼容到4.0就可以了。
     
最後,在Android開發中,初期的測試建議在Android模擬器上完成,它可以提供比手機等真實設備更廣泛的特性定製。在產品逐漸成熟並計劃投放到市場時,再參考以上因素,選擇有代表性的手機或其它安卓設備進行調試。
② 在Android中要實現圖表統計該怎麼做
package com.yzxy.draw;
 
import java.util.ArrayList;
import java.util.HashMap;
import com.yzxy.draw.tools.Tools;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.RectF;
import android.graphics.Paint.Style;
import android.graphics.Typeface;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
@SuppressLint("ViewConstructor")
class MyTuView extends View{
 
public static final int RECT_SIZE = 10;
private Point mSelectedPoint = null;
public static enum Mstyle
{
Line,scroll
}
 
private Mstyle mstyle=Mstyle.Line;
private Point[] mPoints = new Point[8];
 
Context context;
Activity act;
int bheight=0;
Tools tool=new Tools();
HashMap map;
ArrayList dlk;
int totalvalue=30;
int pjvalue=5;
String xstr,ystr;
int margint=15;
int marginb=40;
int c=0;
int resid=0;
Boolean isylineshow;
public MyTuView(Context context,HashMap map,int totalvalue,int pjvalue,String xstr,String ystr,Boolean isylineshow)
{
super(context);
this.context=context;
this.act = (Activity)context;
this.map=map;
this.totalvalue=totalvalue;
this.pjvalue=pjvalue;
this.xstr=xstr;
this.ystr=ystr;
this.isylineshow=isylineshow;
act.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
 
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// canvas.drawColor(Color.GRAY);
if(c!=0)
this.setbg(c);
if(resid!=0)
this.setBackgroundResource(resid);
dlk=tool.getintfrommap(map);
int height=getHeight();
if(bheight==0)
bheight=height-marginb;
 
int width=getWidth();
 
Log.i("w", getWidth()+":"+getHeight());
int blwidh=tool.dip2px(context,50);
int pjsize=totalvalue/pjvalue;
 
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.GRAY);
paint.setStrokeWidth(1);
paint.setStyle(Style.STROKE);
 
// 畫直線(橫向)
for(int i=0;i xlist=new ArrayList();//記錄每個x的值
//畫直線(縱向)
for(int i=0;i dlk,HashMap map,ArrayList xlist,int max,int h)
{
Point[] points=new Point[dlk.size()];
for(int i=0;i getMap() {
return map;
}
 
public void setMap(HashMap map) {
this.map = map;
}
 
public int getTotalvalue() {
return totalvalue;
}
 
public void setTotalvalue(int totalvalue) {
this.totalvalue = totalvalue;
}
 
public int getPjvalue() {
return pjvalue;
}
 
public void setPjvalue(int pjvalue) {
this.pjvalue = pjvalue;
}
 
public String getXstr() {
return xstr;
}
 
public void setXstr(String xstr) {
this.xstr = xstr;
}
 
public String getYstr() {
return ystr;
}
 
public void setYstr(String ystr) {
this.ystr = ystr;
}
 
public int getMargint() {
return margint;
}
 
public void setMargint(int margint) {
this.margint = margint;
}
 
public Boolean getIsylineshow() {
return isylineshow;
}
 
public void setIsylineshow(Boolean isylineshow) {
this.isylineshow = isylineshow;
}
 
public int getMarginb() {
return marginb;
}
 
public void setMarginb(int marginb) {
this.marginb = marginb;
}
 
public Mstyle getMstyle() {
return mstyle;
}
 
public void setMstyle(Mstyle mstyle) {
this.mstyle = mstyle;
}
 
public int getBheight() {
return bheight;
}
 
public void setBheight(int bheight) {
this.bheight = bheight;
}
 
public int getC() {
return c;
}
 
public void setC(int c) {
this.c = c;
}
 
public int getResid() {
return resid;
}
 
public void setResid(int resid) {
this.resid = resid;
}
 
}
代碼片段
package com.yzxy.draw.tools;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;
public class Tools 
{
        private final static String ALBUM_PATH  = Environment.getExternalStorageDirectory() + "/yueqiu/";
        
    public  int dip2px(Context context, float dpValue) 
    {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
public  int px2dip(Context context, float pxValue) 
    {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
public ArrayList getintfrommap(HashMap map)
    {
        ArrayList dlk=new ArrayList();
        int position=0;
        @SuppressWarnings("rawtypes")
                Set set= map.entrySet();   
        @SuppressWarnings("rawtypes")
                Iterator iterator = set.iterator();
 
                 while(iterator.hasNext())
                {   
                        @SuppressWarnings("rawtypes")
                        Map.Entry mapentry  = (Map.Entry)iterator.next();   
                        dlk.add((Double)mapentry.getKey());
                } 
                 for(int i=0;i
代碼片段
package com.yzxy.draw;
import java.io.IOException;
import java.util.HashMap;
import com.yzxy.draw.MyTuView.Mstyle;
import com.yzxy.draw.tools.Tools;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.Toast;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.Color;
public class MainActivity extends Activity {
        MyTuView tu;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                
                HashMap map=new HashMap();
                map.put(1.0, 8.0);
                map.put(7.0, 130.0);
                map.put(2.0, 4.0);
                map.put(3.0, 1.0);
                map.put(4.0, 18.0);
                map.put(5.0, 160.0);
                map.put(6.0, 180.0);
                map.put(8.1, 133.5);
                tu=new MyTuView(this,map,200,50,"x","y",false);
//              tu.setC(Color.CYAN);
                tu.setResid(R.drawable.bg);
//              tu.setBheight(200);
                tu.setTotalvalue(200);
                
                tu.setPjvalue(50);
                tu.setXstr("x");
                tu.setYstr("y");
                tu.setMargint(20);
                tu.setBackgroundColor(Color.WHITE);
                tu.setMarginb(50);
                tu.setMstyle(Mstyle.scroll);
                RelativeLayout rela=getlayout(R.layout.activity_main);
                rela.addView(tu);
                LayoutParams parm=new LayoutParams(1200,400);
                parm.setMargins(50, 50, 50, 100);
                tu.setLayoutParams(parm);
                setContentView(rela);
}
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) 
        {
                getMenuInflater().inflate(R.menu.activity_main, menu);
                return true;
        }
@Override
        public boolean onOptionsItemSelected(MenuItem item) 
        {
                // TODO Auto-generated method stub
                if(item.getItemId() == R.id.menu_settings)
                {
                        if (false == tu.isDrawingCacheEnabled()) 
                        {  
                        tu.setDrawingCacheEnabled(true);
                    }  
                        Bitmap bitmap = tu.getDrawingCache();  
                        Tools tool=new Tools();
                        try {
                                        Boolean b=tool.saveFile(bitmap, "aaaa.png");
                                        if(b)
                                        Toast.makeText(this, "success", Toast.LENGTH_SHORT).show();     
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                }
                if(item.getItemId() == R.id.menu_ch)
                {
                        HashMap map=new HashMap();
                        map.put(1.0, 21.0);
                        map.put(3.0, 25.0);
                        map.put(4.0, 32.0);
                        map.put(5.0, 31.0);
                        map.put(6.0, 26.0);
                        tu.setTotalvalue(40);
                        tu.setPjvalue(10);
                        tu.setMap(map);
                        tu.setIsylineshow(true);
                        tu.postInvalidate();
                }
                if(item.getItemId() == R.id.menu_ch2)
                {
                        HashMap map=new HashMap();
                        map.put(1.0, 41.0);
                        map.put(3.0, 25.0);
                        map.put(4.0, 32.0);
                        map.put(5.0, 41.0);
                        map.put(6.0, 16.0);
                        map.put(7.0, 36.0);
                        map.put(8.0, 26.0);
                        tu.setTotalvalue(50);
                        tu.setPjvalue(10);
                        tu.setMap(map);
                        tu.setMstyle(Mstyle.Line);
                        tu.setIsylineshow(false);
                        tu.postInvalidate();
                }
                return true;
          }
        public RelativeLayout getlayout(int r)
    {
         LayoutInflater inflater = (LayoutInflater)getSystemService(android.content.Context.LAYOUT_INFLATER_SERVICE ); 
                try {
                        XmlResourceParser parser = getResources().getLayout(r);
                        RelativeLayout layout = (RelativeLayout) inflater.inflate(parser, null);
                        return layout;
                }catch (Exception e) {
                        // TODO: handle exception
                }
                return null;
        }
}
