博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
View 操作
阅读量:5953 次
发布时间:2019-06-19

本文共 4807 字,大约阅读时间需要 16 分钟。

日常积累View操作,持续更新

尺寸

在View没有绘制之前获取大小

private int[] unDisplayViewSize(View view){        int[] size = new int[2];        int width = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);        int height = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);        view.measure(width,height);        size[0] = view.getMeasuredWidth();        size[1] = view.getMeasuredHeight();        return size;    }复制代码

View 事件分发

只有可被点击的控件才能够获取到手指的抬起时间,进而获取点击效果。如果想要拦截抬起操作,需要添加

this.setClickable(true)复制代码

测量文字高度

String test = "QinShiMingYue";Rect rect = new Rect();mPaint.getTextBounds(text, 0, test.length(), rect);int width = rect.width();//文字宽int height = rect.height();//文字高复制代码

DataBinding 使用 include标签内部的对象

使用 include 标签内部控件时,需要给 include 一个id,通过id获取控件

复制代码
mBinding.include.lessonView1.XXX复制代码

页面切换动画透明度变化

Activity 页面切换时透明度变化,可以把上一个页面设置成透明效果。

复制代码

这样背景的透明度变化就成了页面中背景图的透明度变化

修改应用内部字体

  • 单个字体修改

    Typeface typeface = Typeface.createFromAsset(getAssets(), "syr.ttf");      mBinding.tvTypefaceTest.setTypeface(typeface);复制代码
  • 全局字体的修改

    public class FontsOverride {      public static void setDefaultFont(Context context,                                      String staticTypefaceFieldName, String fontAssetName) {          final Typeface regular = Typeface.createFromAsset(context.getAssets(),                  fontAssetName);          replaceFont(staticTypefaceFieldName, regular);      }      public static boolean isVersionGreaterOrEqualToLollipop() {          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {              return true;          }          return false;      }      protected static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) {          if (isVersionGreaterOrEqualToLollipop()) {              Map
    newMap = new HashMap
    (); newMap.put("sans-serif", newTypeface); try { final Field staticField = Typeface.class.getDeclaredField("sSystemFontMap"); staticField.setAccessible(true); staticField.set(null, newMap); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } else { try { final Field staticField = Typeface.class.getDeclaredField(staticTypefaceFieldName); staticField.setAccessible(true); staticField.set(null, newTypeface); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } //application : FontsOverride.setDefaultFont(this,"MONOSPACE", "syr.ttf");复制代码

    共享元素动画

    // startActivity  if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {      ActivityOptions options = ActivityOptions.              makeSceneTransitionAnimation(getActivity(),                      new Pair
    (bgview, "lesson_Name"), new Pair
    (parentView.getChildAt(0).findViewById(R.id.iv_class_icon), "class_1"), new Pair
    (parentView.getChildAt(1).findViewById(R.id.iv_class_icon), "class_2"), new Pair
    (parentView.getChildAt(2).findViewById(R.id.iv_class_icon), "class_3")); startActivity(new Intent(getContext(), LessonModuleActivity.class), options.toBundle()); }复制代码
    // endActivity  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {      // 接收上一个页面的共享元素      mBinding.ivBackground.setTransitionName("lesson_Name");      mBinding.include.lessonView1.setTransitionName("class_1");      mBinding.include.lessonView2.setTransitionName("class_2");      mBinding.include.lessonView3.setTransitionName("class_3");  }  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {      this.setEnterSharedElementCallback(new SharedElementCallback() {          // 共享元素动画停止          @Override          public void onSharedElementEnd(List
    sharedElementNames, List
    sharedElements, List
    sharedElementSnapshots) { super.onSharedElementEnd(sharedElementNames, sharedElements, sharedElementSnapshots); mBinding.sbvBackground.setVisibility(View.VISIBLE); } }); }复制代码

RecyclerView itemType

使用 RecyclerView 时可能需要设置 itemViewType。当使用时对于页面视图没有相互转化关系,且视图差别较大时可以使用。但是在两个不同 itemView 之间有相互的转化关系是,不推荐使用。 因为不同的 ItemView 之间在进行切换的时候一般不是生硬的进行切换,中间会存在一定的切换动画,如果使用不同的 itemViewType,当数据更新时真实的 itemView 已经改变,前后两个 itemView 的瞬时状态不容易获取,变化过程会变得很复杂。

转载于:https://juejin.im/post/5afe5055f265da0b8d4229d0

你可能感兴趣的文章
Shell 的变量(转)
查看>>
dict
查看>>
面向对象之继承与派生
查看>>
vim 编辑器常用命令
查看>>
python中IO多路复用、协程
查看>>
Java几款性能分析工具的对比
查看>>
如何隐藏所有的导航栏
查看>>
QQ 的登录封面是怎么设计的
查看>>
eas之Uuid和BOSUuid 区别
查看>>
大数据培训:小白如何学好大数据
查看>>
一些看起来有用但没用过的函数
查看>>
解释清楚智能指针二【用自己的话,解释清楚】
查看>>
【Javascript第二重境界】序
查看>>
python-argparse使用
查看>>
PHP支付宝手机网站支付功能
查看>>
微信小程序css篇----flex模型
查看>>
【转载】IL指令集
查看>>
Linux 常用名利总结
查看>>
C#winform控制textbox输入只能为数字
查看>>
每天一道算法题(13)——使用递归颠倒栈
查看>>