2019独角兽企业重金招聘Python工程师标准>>>
一、屏幕适配说明
在android开发过程中,屏幕适配是一件非常重要的工作,主要原则有以下几点
-
对于控件而言,尽量不要使用固定的宽度和高度,但推荐使用固定的外边距局和内边距。
-
对于drawable-xxx而言,没必要每个dpi都放置图片,完全可以再drawable-hdpi中放入720px级别的图片就可以完成适配,
此外,如果某些部位确实需要调整的话,可以结合values-xxxx。
-
对于平滑色彩,渐变色彩,点击按压效果,层叠效果,平铺效果,尽量自定义drawable,color,bitmap,layer。
图片扭曲(缩放)显示
android:scaleWidth="" 水平扭曲度[百分比]
android:scaleHeight="" 垂直扭曲度[百分比]
android:drawable="" 原始图像
android:scaleGravity="" 缩放后的在空间中的显示方位
android:useIntrinsicSizeAsMinimum="" 是否使用原始大小作为最小宽度和高度//level=的时候就是用户设置的的缩放后的图片,level=10000是原始图片,level=0不可见
android:src="" 原始图片
android:antialias="" 是否消除锯齿
android:dither="" 像素不足时是否进行弥合(适用于低像素的图片)
android:gravity="" 图片显示方位
android:tileMode="" 拉伸模式 mirror(镜像),clamp(投影),repeat(重复),disabled(拉伸)
单向图片裁剪(这个API设计的很糟糕,这个功能并不能起作用,裁剪多少无法设置,需要在代码里设置)
android:clipOrientation=""裁剪方向
android:gravity="" 裁剪起始位置
android:drawable="" 图片资源
例子:
//下面的代码或得到clipDrawable对象,并且增加裁剪区逐步显示图片:
ImageView imageview = (ImageView) findViewById(R.id.image);
ClipDrawable drawable = (ClipDrawable) imageview.getDrawable();
drawable.setLevel(drawable.getLevel() + 10); 注:Level最大值为 10000,有时候可利用ClipDrawable+ImageView做进度图。
渐变过渡,但不能互相切换,可用于图片gellary过渡效果
android:enterFadeDuration="" 进入渐变时间
android:exitFadeDuration="" 离开渐变的时间
-----------------------------------------------------------------
不解释,颜色定义
旋转图片
android:pivotX="" 相对x位置[float]
android:pivotY=""相对y位置[float]也需要修正level,Level的满值是10000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
叠层图片,可以将多种drawable或者图片资源按照层次,从下倒上依次叠加,可视为合成图片,在android开发中,对ratibar,progressbar,slideBar样式修改
android:opacity="" 透明度,opaque->translucent->transparent
内置背景
android:insetXXX="" 表示背景到view的外边距
4. 对于部分帧动画,完全可以使用自定义clipDrable的方式进行替代。
二、通过代码形式自定义Drawable
5.有时也可以选择直接绘drawable,可扩展性更强
Drawable background = new Drawable() {@Overridepublic void draw(Canvas canvas){//canvas.drawLine(viewWidth * 1 / 10, obtainSelectedAreaBorder()[0], viewWidth * 9 / 10, obtainSelectedAreaBorder()[0], paint);//canvas.drawLine(viewWidth * 1 / 10, obtainSelectedAreaBorder()[1], viewWidth * 9 / 10, obtainSelectedAreaBorder()[1], paint);RectF rect = new RectF();rect.left = 16;rect.top = obtainSelectedAreaBorder()[0]-5;rect.right = viewWidth-16;rect.bottom = obtainSelectedAreaBorder()[1]-5;canvas.save();paint.setColor(0x88919191);paint.setStrokeWidth(1.1f);paint.setStyle(Style.STROKE);paint.setAntiAlias(false);canvas.drawRoundRect(rect, 5, 5, paint);canvas.restore();}@Overridepublic void setAlpha(int alpha) {}@Overridepublic void setColorFilter(ColorFilter cf) {}@Overridepublic int getOpacity() {return 0;}};
通过代码自定义Shape
public class RadiusRectShape extends RectShape {@Overridepublic void draw(Canvas canvas, Paint paint) {canvas.drawRoundRect(rect(),0,0,paint);}@Overridepublic RectShape clone() throws CloneNotSupportedException {final RadiusRectShape shape = (RadiusRectShape) super.clone();return shape;}public ShapeDrawable createShapeDrawable(){ShapeDrawable sd = new ShapeDrawable(this);return sd;}
}
6.点9图的使用
点九图是一种非常理想的选择,注意,点九图的左变黑色区域和上边黑色区域为拉伸或者压缩区域,右边黑色区域和下边黑色区域为内容显示基准(可以省略),在没省略的情况下超过区域的文字显示不全。
7.关于动画,有些drawable和animation有类似的功能,有时需要2者配合
package test.view.weitop;public class AnimActivity extends BaseActivity {private View vline;private int width = 0;@Overrideprotected void onCreate(Bundle saveInstance) {super.onCreate(saveInstance);setContentView(R.layout.anim_layout);int w = getWindow().getWindowManager().getDefaultDisplay().getWidth();vline = findViewById(R.id.line);LayoutParams lp = vline.getLayoutParams();width = lp.width = w / 2+ getResources().getDimensionPixelSize(R.dimen.common_1dip) / 2;vline.setLayoutParams(lp);vline.setTag("0");}public void doSwicth(View v) {switch (v.getId()) {case R.id.fade_anim_left: {if (!"0".equals(vline.getTag().toString())) {vline.setTag("0");TranslateAnimation ta = new TranslateAnimation(width, 0, 1, 1);ta.setDuration(200);ta.setFillBefore(true);vline.clearAnimation();vline.startAnimation(ta);}}break;case R.id.fade_anim_right:if (!"1".equals(vline.getTag().toString())) {vline.setTag("1");TranslateAnimation ta = new TranslateAnimation(0, width, 1, 1);ta.setDuration(200);ta.setFillBefore(true);ta.setFillAfter(true);vline.clearAnimation();vline.startAnimation(ta);}break;default:break;}}}
参考网站
http://blog.csdn.net/superjunjin/article/details/7670864
http://blog.csdn.net/ronghao3508/article/details/19118429
http://blog.csdn.net/lonelyroamer/article/details/8242919
http://www.iteye.com/topic/689272
http://blog.csdn.net/a_large_swan/article/details/7107126
http://mux.baidu.com/?p=1506
注意事项
在实际开发中,除了自定义的 color selector外,其余的drawable都支持ImageView,color selector只支持文字颜色变化。