Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中不同屏幕大小的自定义形状_Android_Custom Component - Fatal编程技术网

android中不同屏幕大小的自定义形状

android中不同屏幕大小的自定义形状,android,custom-component,Android,Custom Component,我有一个自定义视图,它在视图中绘制了一系列矩形。 我已经扩展了视图并覆盖了onDraw方法 这是Constructor(仅添加重要部分) 公共CustomDrawableView(上下文mContext,属性集attr) { 超级(mContext,attr); //设置测量尺寸(测量宽度、测量高度) Log.e(“CustomDrableView”、“Widt”+attr.getAttributeName(5)); Log.e(“CustomDrableView”、“widht2”+attr.

我有一个自定义视图,它在视图中绘制了一系列矩形。 我已经扩展了视图并覆盖了onDraw方法

这是Constructor(仅添加重要部分)

公共CustomDrawableView(上下文mContext,属性集attr) { 超级(mContext,attr); //设置测量尺寸(测量宽度、测量高度) Log.e(“CustomDrableView”、“Widt”+attr.getAttributeName(5)); Log.e(“CustomDrableView”、“widht2”+attr.getAttributeValue(5)); mColors=newint[]{ //色码 }; mColors\u state\u init=new int[] { //色码 }; mPaint=新油漆(); mPaint.setAntiAlias(true); mPaint2=新油漆(mPaint); mpain2.setAlpha(64); 浮动[]半径={15,15,15,15,15,15,15}; mDrawable=新的ShapeDrawable(新的RoundRectShape(半径,null,null)); //mDrawable.getPaint().setColor(0xff74AC23); ShapeDrawable prev=可绘制; mDrawables=新的ShapedRavable[15]; 对于(int i=0;i<15;i++){ mDrawables[i]=新的ShapedRavable(新的RoundRectShape(半径,null,null)); } } 这是昂德劳

protected void onDraw(Canvas canvas) {       
     mDrawable.setBounds(x, y, x + width, y + height);
      for (int i = 0; i < 15; i++) {

        mDrawables[i].getPaint().setColor(0xff74AC23);
        mDrawables[i].setDither(true);
        mDrawables[i].setBounds(x, y + (i *20), x+width, y+height+(i*20));
      }


    for(int i = 0 ; i < 15 ; i++)
    {
         ColorFilter filter = null;

         if (mColors[i] == 0) {
                    filter = null;
                } else {
                    filter = new PorterDuffColorFilter(mColors_test[i],
                            PorterDuff.Mode.SRC_ATOP);


        }


             mDrawables[i].setColorFilter(filter);
             mDrawables[i].draw(canvas);
    }
protectedvoidondraw(画布){
M可绘制.立根(x,y,x+宽度,y+高度);
对于(int i=0;i<15;i++){
mDrawables[i].getPaint().setColor(0xff74AC23);
mDrawables[i].setDither(true);
mDrawables[i].立根(x,y+(i*20),x+宽度,y+高度+(i*20));
}
对于(int i=0;i<15;i++)
{
ColorFilter=null;
if(mColors[i]==0){
filter=null;
}否则{
过滤器=新的PorterDuffColorFilter(mColors\u测试[i],
PorterDuff.Mode.SRC_);
}
mDrawables[i].setColorFilter(过滤器);
mDrawables[i].绘制(画布);
}
宽度和高度值必须随屏幕大小的不同而变化。如何实现这一点


我在xml中为视图指定静态宽度和高度。我应该避免吗?

首先,是的,您应该避免在xml中设置静态宽度和高度,让它们成为包装内容。然后,不要这样做

 float[] radii = {15,15,15,15,15,15,15,15}; 
根据屏幕大小找到15的等效值。要实现这一点,您应该获得屏幕大小。一旦获得屏幕大小,您可以按比例调整大小。可以是这样的:

 int calculatedValue = screenWidth * 15 / 320;    // I assume 320 as a default screen width here
 float[] radii = {calculatedValue, calculatedValue, calculatedValue, calculatedValue, calculatedValue, calculatedValue, calculatedValue, calculatedValue}
以防万一,如果你不知道如何获得屏幕尺寸…这里有一个提示:

 public void GetDimensions() {
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    width = metrics.widthPixels;
    height = metrics.heightPixels;
}
 public void GetDimensions() {
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    width = metrics.widthPixels;
    height = metrics.heightPixels;
}