android中不同屏幕大小的自定义形状
我有一个自定义视图,它在视图中绘制了一系列矩形。 我已经扩展了视图并覆盖了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)); } } 这是昂德劳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.
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;
}