① 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