① android開發 怎樣獲取屏幕的寬高是多少厘米
我們需要獲取Android手機或Pad的屏幕的物理尺寸,以便於界面的設計或是其他功能的實現。下面就介紹講一講如何獲取屏幕的物理尺寸
下面的代碼即可獲取屏幕的尺寸。
在一個Activity的onCreate方法中,寫入如下代碼:
[java] view plain print?
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕寬度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕寬度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
但是,需要注意的是,在一個低密度的小屏手機上,僅靠上面的代碼是不能獲取正確的尺寸的。比如說,一部240x320像素的低密度手機,如果運行上述代碼,獲取到的屏幕尺寸是320x427。因此,研究之後發現,若沒有設定多解析度支持的話,Android系統會將240x320的低密度(120)尺寸轉換為中等密度(160)對應的尺寸,這樣的話就大大影響了程序的編碼。所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens節點,具體的內容如下:
[html] view plain print?
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:resizeable="true"
android:anyDensity="true" />
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:resizeable="true"
android:anyDensity="true" /> 這樣的話,當前的Android程序就支持了多種解析度,那麼就可以得到正確的物理尺寸了。
[java] view plain print?
import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.TextView;
public class TextCanvasActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(new MyView(this));
//定義DisplayMetrics 對象
setContentView(R.layout.main);
DisplayMetrics dm = new DisplayMetrics();
//取得窗口屬性
getWindowManager().getDefaultDisplay().getMetrics(dm);
//窗口的寬度
int screenWidth = dm.widthPixels;
//窗口高度
int screenHeight = dm.heightPixels;
TextView textView = (TextView)findViewById(R.id.tv1);
textView.setText("屏幕寬度: " + screenWidth + "\n屏幕高度: " + screenHeight);
}
}
② App 安卓720*1280的狀態欄、導航欄、主菜單高度分別是50、96、96,那麼1080x1920的呢
Android的多解析度,一向是設計師和開發者非常頭疼的事兒。盡管如此,對於多分辨造成的復雜問題,也是大家要優先解決的。Android支持多種不同的dpi模式:ldpi 、mdpi 、hdpi 、xhdpi 、xxhdpi 、xxxhdpi 。
③ Android 獲取屏幕寬高的幾種方式
方法1:利用WindowManager獲取
intscreenWidth=getWindowManager().getDefaultDisplay().getWidth();//屏幕寬(像素,如:720px)
intscreenHeight=getWindowManager().getDefaultDisplay().getHeight();//屏幕高(像素,如:1280px)
註:此方法已經過時,有新的API對其進行替代,並且在自定義控制項的某些時候(例如繼承LinearLayout的類中),由於無法得到WindowManager對象而無法利用此方法
方法2:利用DisplayMetrics對象獲取
[java] view plain
DisplayMetricsdm=newDisplayMetrics();
dm=getResources().getDisplayMetrics();
floatdensity=dm.density;//屏幕密度(像素比例:0.75/1.0/1.5/2.0)
intdensityDPI=dm.densityDpi;//屏幕密度(每寸像素:120/160/240/320)
screenWidth=dm.widthPixels;//屏幕寬(像素,如:3200px)
screenHeight=dm.heightPixels;//屏幕高(像素,如:1280px)
方法3:WindowManager和DisplayMetrics的結合
[java] view plain
DisplayMetricsdm=newDisplayMetrics();
dm=newDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
density=dm.density;//屏幕密度(像素比例:0.75/1.0/1.5/2.0)
densityDPI=dm.densityDpi;//屏幕密度(每寸像素:120/160/240/320)
intscreenWidthDip=dm.widthPixels;//屏幕寬(dip,如:320dip)
intscreenHeightDip=dm.heightPixels;//屏幕寬(dip,如:533dip)
screenWidth=(int)(dm.widthPixels*density+0.5f);//屏幕寬(px,如:720px)
screenHeight=(int)(dm.heightPixels*density+0.5f);//屏幕高(px,如:1280px)
④ android開發問題: 在Activity主界面繪制畫布,可是它把整個窗口都覆蓋掉了,怎麼設定畫布的窗口大小呢(
你是說View占滿了整個屏幕嗎?這樣的話就只能在layout中寫一個布局文件,將View以一種組件的方式聲明到.xml文件中,然後你可以在它的上下中聲明其他的button或者textview或者ImageButton等。
⑤ android中怎樣實現對畫布的縮放
工具准備
畫布:Canvas來響應畫畫(draw)的調用(並將其寫入bitmap);
具體操作
Canvas類提供了很多「畫「的方法,先來建一個類,繼承自View。讓畫布鋪在View上而顯示出來(這也是自定義UI組件的路子),源碼如下:
⑥ android中自己定義的布局的高和寬為0,怎麼辦
可以通過setLayoutParams這個屬性設置寬高度,例如:
LinearLayout linearLayout=new LinearLayout(context);
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
或者linearLayout.setLayoutParams(new LinearLayout.LayoutParams(100, 100));
⑦ android里,當子視圖需要的畫布比父視圖大時,超出部分怎樣才不會被裁剪。
在父視圖里設置android:clipchildren="false",超過父視圖的組件就不會被裁剪了
⑧ 如何設計android4.4規范的像素1080x1920的界面
剛開始接觸UI的時候,碰到的最多的就是尺寸問題,什麼畫布要建多大、文字該用多大才合適、我要做幾套界面才可以?什麼七七八八的也著實讓人有些頭疼。
1、尺寸及解析度
iPhone 界面尺寸:320x480、640x960、640x1136
iPad 界面尺寸:1024x768、2048x1536
(以上單位都是像素哦,至於解析度一般網頁UI和移動UI基本上都只要 72 ppi)
當然,在設計的時候並不是每個尺寸都要做一套,尺寸按自己的手機尺寸來設計,比較方便預覽效果,一般用 640x960 或者 640x1136 的尺寸設計。
P.S. 作圖的時候確保都是用形狀工具(快捷鍵:U)畫的,這樣更方便後期的切圖或尺寸變更~
2、界面基本組成元素
iPhone的APP界面一般由四個元素組成,分別是:狀態欄、導航欄、主菜單欄以及中間的內容區域
這里取用 640x960 的尺寸設計,那我們就說說在這個尺寸下這些元素的尺寸:
狀態欄:就是我們經常說的信號、運營商、電量等顯示手機狀態的區域,其高度為:40 px
導航欄:顯示當前界面的名稱,包含相應的功能或者頁面間跳轉的按鈕,其高度為:88 px
主菜單欄:類似於頁面的主菜單,提供整個應用的分類內容的快速跳轉,其高度為:98 px
內容區域:展示應用提供的相應內容,整個應用中布局變更最為頻繁的,其高度為:734 px
⑨ Android畫板怎麼在畫布放大的同時不改變畫筆大小
三種方法:
第一種:把用ps打開圖片然後選擇菜單-圖像(I)裡面的畫布大小
彈出裁切面板後如上圖所示點擊確定即可將畫布變成和圖片一樣大小
⑩ android圖像繪制——畫布保存為圖片
解釋:
1、首先創建一個Bitmap圖片,並指定大小;
2、在該圖片上創建一個新的畫布Canvas,然後在畫布上繪制,並保存即可;
3、需要保存的目錄File,注意如果寫的目錄如「/sdcard/akai/」如果不存在的話,要先創建(file.mkdirs()),否則FileOutputStream會報錯No found;
4、需要添加許可權:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
什麼是畫布呢 其實通過字面意思的理解就是用來繪畫的地方,那麼android里的畫布是神馬樣子的呢?
在自定義畫布中常用到下面3個類
Canvas
這些繪圖方法中的每一個都需要指定一個Paint對象來渲染它
Paint
Paint也稱為"刷子",Paint可以指定如何將基本圖形繪制到點陣圖上。
Paint類相當於一個筆刷和調色板。它可以選擇如何使用上面描述的draw方法來渲染繪 制在畫布上的基本圖形。通過修改Paint對象,可以在繪圖的時候控制顏色、樣式、字體和特殊效果。最簡單地,setColor可以讓你選擇一個Paint的顏色,而Paint對象的樣式(使用setStyle控制)則可以決定是繪制繪圖對象的輪廓(STROKE),還是只填充每一部 分(FILL),或者是兩者都做(STROKE_AND_FILL)除了這些簡單的控制之外,Paint類還支持透明度,另外,它也可以通過使用各種各樣的陰影、過濾器和效果進行修改,從而提供由更豐富的、復雜的畫筆和顏料組成的調色板。
從繼承View類(或其子類)開始,並定義onDraw()回調方法。系統會調用該方法來完 成View對象自己的繪制請求。這也是通過Canvas對象來執行所有的圖形繪制調用的地方,這個Canvas對象是由onDraw()回調方法傳入的。
Android框架只在必要的時候才會調用onDraw()方法,每次請求應用程序准備完成圖形 繪制任務時,必須通過調用invalidate()方法讓該View對象失效。這表明可以在該View 對象上進行圖形繪制處理了,然後Android系統會調用該View對象的onDraw()方(盡 管不保證該回調方法會立即被調用)。
在定製的View組件的onDraw()方法內部,使用給定的Canvas對象來完成所有的圖形繪制處理(如Canvas.draw…()方法或把該Canvas對象作為參數傳遞給其他類的draw() 方法)。一旦onDraw()方法被執行完成,Android框架就會使用這個Canvas對象來繪制一個有系統處理的Bitmap對象。
下面是Paint一些常用方法:
Bitmap
Bitmap繪圖的表面也稱點陣圖(這里詳細說哈點陣圖的功能)。
從資源中獲取點陣圖:
通過Resource的函數:InputStream openRawResource(int id)獲取得到資源文件的數據流後,可以通過2種方式獲得bitmap
使用BitmapDrawable :
使用BitmapDrawable(InputStream is)構造一個BitmapDrawable;
使用BitmapDrawable類的getBitmap()獲取得到點陣圖;
使用BitmapFactory使用BitmapFactory類decodeStream(InputStream is)解碼位 圖資源,獲取點陣圖BitmapFactory的所有函數都是static,這個輔助類可以通過資 源ID、路徑、文件、數據流等方式來獲取點陣圖。
獲取點陣圖的信息
一般獲取點陣圖信息包括:點陣圖大小、透明度、顏色格式等等,這些信息呢可以通過 三-一方法獲取得到Bitmap就迎刃而解了,Android SDK中對Bitmap有詳細說明,大家可以去詳細了解哈。
顯示點陣圖
顯示點陣圖需要使用核心類Canvas,可以直接通過Canvas類的drawBirmap()顯示點陣圖,或者藉助於BitmapDrawable來將Bitmap繪制到Canvas,下面的實例中會詳細列舉到
點陣圖的縮放
點陣圖的縮放,在Android SDK中提供了2種方法:
1:將一個點陣圖按照需求重畫一遍,畫後的點陣圖就是我們需要的了,與點陣圖的顯示幾乎 一樣:
drawBitmap(Bitmap bitmap, Rect src, Rectdst, Paint paint)
2:在原有點陣圖的基礎上,縮放原點陣圖,創建一個新的點陣圖:
createBitmap(Bitmap source, int x, int y,int width, int height, Matrix m, boolean filter)
點陣圖旋轉
點陣圖的旋轉,離不開Matrix。Android SDK提供了Matrix類,可以通過各種介面來設置 矩陣
android 處理圖片工具
截取視頻幀並轉化為Bitmap