-
//把dp 转化为 px 此方法可用于单位转换 TypedValue.applyDimension(TypedValus.COMPLEX_UNIT_DIP,50,context.getResources().getDisplayMetrics());查看全部
-
总结(如图,简单明了) 注意: 属性动画的内容:http://blog.csdn.net/lmj623565791/article/details/39257409查看全部
-
这是上一笔记的图查看全部
-
抽屉式菜单(二) 1.原理:还是利用nineoldandroids-2.4.0.jar源码包中的ViewHelper类中的接口来实现 http://blog.csdn.net/lixiaodaoaaa/article/details/41310233,这个文章还有一些其它的ViewHelper的例子 2.首先要明确最后的效果应该是什么样的,借助scale范围:1.0~0.0来实现 (1)content视图有1.0~0.7缩放效果: 梯度表达:0.7+0.3*scale (2)菜单视图有0.7~1.0缩放效果: 梯度表达:1.0-scale*0.3 (3)菜单视图还有0.6~1.0的透明度变化效果 梯度表达:1.0-0.4*scale 3.具体实现比较简单,都是接口的调用(如图) (1)设置menu的缩放效果通过setScaleX()来实现 ViewHelper.setScaleX(mMenu, leftScale); ViewHelper.setScaleY(mMenu, leftScale); (2)设置透明度变化效果 ViewHelper.setAlpha(mMenu, leftAlpha); (3)设置content视图的缩放 这里需要注意要给content设置一个缩放的中心点为最右边中心点(下一张图)查看全部
-
抽屉式菜单(一) 1.原理:使用了nineoldandroids-2.4.0.jar源码包中的偏移动画的实现。 刚开始时,menu的向右偏移量是最大的,为自己的mMenuWith,这样整个menu就会隐藏在content视图后面。 当向右滑动的过程中,整个HorizontalscrollView都在向右滑,但是同时menu还需要不断向右偏移,这样它的左边就能一直靠在屏幕左边。但是注意menu向右偏移的宽度在减少。 2.弄清楚两个概念 (1)属性动画的TranslationX 这是指setTranslationX(view, translationX)的第二个参数,即偏移量,大于0表示向右偏移,小于0表示向左偏移 注意: 如果使用Android Studio编程,nineoldandroids包是可以通过添加dependencies来添加进来的,不需要下载并放在/libs下。 (2)梯度scale 因为动画过程是比较平缓的,所以应该设置一个float型的梯度值 这个梯度值是通过scrollX来获得的,scrollX是menu距左边屏幕的宽度,在整个HorizontalScrollView向右滑动过程中,这个值是渐变的(从mMenuWidth -> 0),和menu视图向右偏移量对应。 3.最后需要考虑的是动画的实现 1)ACTION_MOVE中实现 移动过程中,通过getScrollX()获取scrollX的值,然后设置梯度,然后调用setTranslationX()设置偏移。 这样在点击“切换菜单”的时候不会看到像要的效果。因为“切换菜单”的实现是直接调用smoothScrollTo()来实现的。 2)通过onScrollChanged(int l...) 这个函数是nineoldandroids包中的,第一个参数l就是scrollX,而且onScrollChanged()不管是在整个View自动滚动还是手动滚动时都会被调用,这样就解决了点击“切换菜单”的问题。 3)实现如图 //l是菜单最左边距屏幕左边的宽度,范围:mMenuWidth->0 //scale范围:1->0 float scale = l * 1.0f / mMenuWidth; //scale * mMenuWidth偏移量范围就是:mMenuWidth->0查看全部
-
添加蓝牙切换 1.实现比较简单 先实现两个打开/关闭菜单的函数 private void closeMenu() { if(!isOpen)return; this.smoothScrollTo(mMenuWidth, 0); } private void openMenu(){ if(isOpen)return; this.smoothScrollTo(0, 0); } 2.实现一个关键的toggle()方法,用来统一处理 public void toggle(){ if(isOpen) { closeMenu(); isOpen = false; }else { openMenu(); isOpen = true; } } 3.关键就是学习这种实现思想查看全部
-
自定义左侧菜单距离右侧屏幕的宽度 1.创建一个属性文件attr.xml <resources> <attr name = "rightPadding" format="dimension" ></attr> <declare-styleable name="SlidingMenu"> <attr name="rightPadding" ></attr> </declare-styleable> </resources> 2.activity_main.xml布局中添加命名空间,并为这个属性设置一个值 xmlns:zhangxt4="http://schemas.android.com/apk-res" <SlidingMenu zhangxt4:rightPadding="100dp" 3.当使用了自定义的属性时,会调用此构造方法 SlidingMenu(Context context, AttributeSet attrs, int defStyleAttr) //获取自定义的属性 TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SlidingMenu, defStyleAttr, 0); int n = a.getIndexCount(); for(int i = 0; i < n; i++){ int attr = a.getIndex(i); switch (attr){ case R.styleable.SlidingMenu_rightPadding: //默认值 …… mMenuRightPadding = a.getDimensionPixelSize(attr, defautRightPadding); } } 4.自定义属性和UI模板的知识点参考《Android UI模板设计》的课程 http://www.imooc.com/space/notelist/uid/1859625/cid/247查看全部
-
自定义ViewGroup 1.(3)onTouchEvent()监听点击事件(续) 这里只需要判断当手指离开屏幕时,整个HorizontalScrollView最左边离屏幕左边的距离,即被隐藏的区域的宽度 int action = ev.getAction(); switch (action){ case MotionEvent.ACTION_UP: //获取HorizontalScrollView最左边离屏幕左边的宽度,即左侧隐藏View的宽度 int scrollX = getScrollX(); if(scrollX >= mMenuWidth/2){ //隐藏宽度比较大,继续隐藏 this.smoothScrollTo(mMenuWidth, 0); }else{ this.smoothScrollTo(0, 0); } return true; }查看全部
-
自定义ViewGroup 1.自定义ViewGroup是实现这个课程关键的一点,也是实现自定义View的关键知识点 2.关键需要实现三个方法: (1)onMeasure()决定自己和自己内部子View的宽和高 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if(!once) { mWapper = (LinearLayout) getChildAt(0); mMenu = (ViewGroup) mWapper.getChildAt(0); mContent = (ViewGroup) mWapper.getChildAt(1); mMenu.getLayoutParams().width = mScreenWidth - mMenuRightPadding; mContent.getLayoutParams().width = mScreenWidth; once = true; } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } 用once的目的是防止多次设置子View的宽和高 (2)onLayout()决定子view放置的位置,这里需要通过设置偏移量来将左侧菜单的布局隐藏起来 protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if(changed) { this.scrollTo(mMenuWidth, 0); //scrollTo(x, y) x为正值表示滚动条向右移动,x的值表示HorizontalScrollView的最左边距离屏幕的宽度 } } (3)onTouchEvent()监听点击事件(续)查看全部
-
菜单布局 1.首先主布局是一个RelativeLayout,内套一个HorizontalScrollView。 HorizontalScrollView内套一个水平的LinearLayout,在这个LinearLayout的左边就是菜单栏,右边是主要内容 2.左边的菜单栏的布局,具体内容见代码 (1)整体是RelativeLayout,内套一个垂直方向的LinearLayout (2)在这个LinearLayout中,垂直放置有5个菜单项 (3)每个菜单项是一个RelativeLayout,每个RelativeLayout中,左边是一个ImageView,右边是一个TextView 3.查看全部
-
原理: 实现一个ViewGroup,继承HorizontalScrollView(如图)查看全部
-
在ListView中每个行布局能实现这样的效果吗查看全部
-
自定义属性: 1:attrs.xml 2:xmlns:...,使用属性 3.三个参数的构造函数内读取值查看全部
-
android studio里,在activity_main中,不需要自己手动定义xmlns命名空间,系统会自动补充xmlns:app="http://schemas.android.com/apk/res-auto"查看全部
-
onlayout查看全部
举报
0/150
提交
取消