自定义view clip圆形变方形的问题

今天自定义view 中,用到了apidemo的clipping.java里的
  clip.addCircle(x, bg.getHeight()/2, RADIUS*2, Path.Direction.CW);
  canvas.clipPath(clip, Region.Op.REPLACE);

但奇怪的是,在1280*800的平板上,是个圆形。但在N10的平板上,却是个方形。用如下代码测了N10的一些参数:
    DisplayMetrics dm = new DisplayMetrics();    
    dm = getResources().getDisplayMetrics();    
     float density    = dm.density;                 // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)    
     int densityDPI = dm.densityDpi;         // 屏幕密度(每寸像素:120/160/240/320)    
     float xdpi = dm.xdpi;                        
     float ydpi = dm.ydpi;    
    Log.e(TAG     + "    DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);    
    Log.e(TAG + "    DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);    
     int screenWidth    = dm.widthPixels;             // 屏幕宽(像素,如:480px)    
     int screenHeight = dm.heightPixels;         // 屏幕高(像素,如:800px)    
    Log.e(TAG + "    DisplayMetrics(111)", "屏幕宽=" + screenWidth + "; 屏幕高=" + screenHeight);    

得到如下:
03-20 20:25:16.190: E/lc  DisplayMetrics(26410): xdpi=298.275; ydpi=298.823
03-20 20:25:16.190: E/lc  DisplayMetrics(26410): density=2.0; densityDPI=320
03-20 20:25:16.190: E/lc  DisplayMetrics(111)(26410): 屏幕宽=2560; 屏幕高=1504

而 1280*800的密度只有240.  但这都不是原因,只是现象。 仔细看了apidemo中clipping.java类,发现在配置文件中多了一个属性:android:hardwareAccelerated="false" 。 复制过来,就如愿显示了。
查了一下这个属性:

     从Android3.0 (API level11)开始,Android的2D显示管道被被设计得更加支持硬加速了.硬加速使用GPU承担了所有在View的canvas上执行的绘制操作.
  启用硬加速最简单的的方法是对整个应用启用硬件速.如果你的应用只使用标准的view和Drawable,全局启用硬加速将不会带来任何负面影响.然而,因为硬加速不是被所有的2D绘制所支持,所以启用它时可能对你的自定义绘制产生影响.出现的问题经常是不可见的,也可能是异常,或错误地显示了像素.为了避免这些问题,需要自己控制好是否启用硬件加速。

你可能感兴趣的:(clip,圆形,方形)