⑴ android 怎样用HorizontalScrollView左右弹性的菜单
{
SlidingMenumSlidingMenu;
@Override
protectedvoidonCreate(Bundlearg0){
super.onCreate(arg0);
setContentView(R.layout.main);
DisplayMetricsdm=newDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
mSlidingMenu=(SlidingMenu)findViewById(R.id.slidingMenu);
mSlidingMenu.setAlignScreenWidth((dm.widthPixels/5)*2);
ViewleftView=getLayoutInflater().inflate(R.layout.left_menu,null);
ViewrightView=getLayoutInflater().inflate(R.layout.right_menu,null);
ViewcenterView=getLayoutInflater().inflate(R.layout.center,null);
mSlidingMenu.setLeftView(leftView);
mSlidingMenu.setRightView(rightView);
mSlidingMenu.setCenterView(centerView);
ButtonshowLeftMenu=(Button)centerView.findViewById(R.id.center_left_btn);
showLeftMenu.setOnClickListener(this);
ButtonshowRightMenu=(Button)centerView.findViewById(R.id.center_right_btn);
showRightMenu.setOnClickListener(this);
}
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
switch(v.getId()){
caseR.id.center_left_btn:
mSlidingMenu.showLeftView();
break;
caseR.id.center_right_btn:
mSlidingMenu.showRightView();
break;
default:
break;
}
}
}
⑵ 如何使用ScrollView
填充图案的定义也有两种,一种是按毫米定义的,一种是按英寸定义的,在公制图纸中通常是按毫米定义的。
一、结构
public class ScrollView extends FrameLayout
java.lang.Object
Android.view.View
android.view.ViewGroup
android.widget.FrameLayout
android.widget.ScrollView
二、概述
一种可供用户滚动的层次结构布局容器,允许显示比实际多的内容。ScrollView是一种FrameLayout,意味需要在其上放置有自己滚动内容的子元素。子元素可以是一个复杂的对象的布局管理器。通常用的子元素是垂直方向的LinearLayout,显示在最上层的垂直方向可以让用户滚动的箭头。
TextView类也有自己的滚动功能,所以不需要使用ScrollView,但是只有两个结合使用,才能保证显示较多内容时候的效率。但只有两者结合使用才可以实现在一个较大的容器中一个文本视图效果。
ScrollView只支持垂直方向的滚动。
三、构造函数
public ScrollView (Context context)
创建一个默认属性的ScrollView实例
public ScrollView (Context context, AttributeSet attrs)
创建一个带有attrs属性的ScrollView 实例。
public ScrollView (Context context, AttributeSet attrs, int defStyle)
创建一个带有attrs属性,并且指定其默认样式的ScrollView实例。
四、公共方法
public void addView (View child)
添加子视图。如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。
参数
child 所添加的子视图
public void addView (View child, int index)
添加子视图。如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。
参数
child 所添加的子视图
index 添加子视图的位置
public void addView (View child, int index, ViewGroup.LayoutParams params)
根据指定的layout参数添加子视图
参数
child 所添加的子视图
index 添加子视图的位置
params 为子视图设置的layout参数
public void addView (View child, ViewGroup.LayoutParams params)
根据指定的layout参数添加子视图。
参数
child 所添加的子视图
params 为子视图设置的layout参数
public boolean arrowScroll (int direction)
响应点击上下箭头时对滚动条滚动的处理。
参数
direction 按下的箭头所对应的方向
返回值
如果我们处理(消耗)了此事件返回true,否则返回false。
public void computeScroll ()
被父视图调用,用于必要时候对其子视图的值(mScrollX和mScrollY)进行更新。典型的情况如:父视图中某个子视图使用一个Scroller对象来实现滚动操作,会使得此方法被调用。
public boolean dispatchKeyEvent (KeyEvent event)
发送一个key事件给当前焦点路径的下一个视图。此焦点路径从视图树的顶层执行直到当前焦点视图。如果此视图为焦点视图,将为自己发送。否则,会为当前焦点路径的下一个节点发送。此方法也会激起一个key监听器。
参数
event 发送的key事件
返回值
事件被处理返回true,否则返回false。
public void draw (Canvas canvas)
手动绘制视图(及其子视图)到指定的画布(Canvas)。这个视图必须在调用这个函数之前做好了整体布局。当实现一个视图时,不需要继承这个方法;相反,你应该实现onDraw(Canvas)方法。
参数
canvas 绘制视图的画布
public boolean executeKeyEvent (KeyEvent event)
当接收到key事件时,用户可以调用此函数来使滚动视图执行滚动,类似于处理由视图体系发送的事件。
参数
event 需要执行key的事件
返回值
事件被处理返回true,否则返回false。
public void fling (int velocityY)
滚动视图的滑动(fling)手势。(译者注: 如何监听android的屏幕滑动停止事件)
参数
velocityY Y方向的初始速率。正值表示手指/光标向屏幕下方滑动,而内容将向上滚动。
public boolean fullScroll (int direction)
对响应“home/end”短按时响应滚动处理。此方法将视图滚动到顶部或者底部,并且将焦点置于新的可视区域的最顶部/最底部组件。若没有适合的组件做焦点,当前的ScrollView会收回焦点。
参数
direction滚动方向:FOCUS_UP表示视图向上滚动;FOCUS_DOWN表示视图向下滚动
返回值
若key事件被消耗(consumed)返回true,其他情况返回false。
public int getMaxScrollAmount ()
返回值
当前滚动视图响应箭头事件能够滚动的最大数。
public boolean isFillViewport ()
指示当前ScrollView的内容是否被拉伸以填充视图可视范围(译者注:viewport可视范围,参见决定Scrollviewer里面Control的可视范围)。
返回值
内容填充视图返回true,否则返回false。
public boolean isSmoothScrollingEnabled ()
返回值
按箭头方向滚动时,是否显示滚动的平滑效果。
public boolean onInterceptTouchEvent (MotionEvent ev)
实现此方法是为了拦截所有触摸屏幕时的运动事件。可以像处理发送给子视图的事件一样去监视这些事件,并且获取当前手势在任意点的ownership
使用此方法时候需要注意,因为它与View.onTouchEvent(MotionEvent)有相当复杂的交互,并且前提需要正确执行View.onTouchEvent(MotionEvent)。事件将按照如下顺序接收到:
1. 收到down事件
2. Down事件或者由视图组的一个子视图处理,或者被用户自己的onTouchEvent()方法处理;此处理意味你应该执行onTouchEvent()时返回true,这样才能继续看到剩下的手势(取代找一个父视图处理)。如果onTouchEvent()返回true时,你不会收到onInterceptTouchEvent()的任何事件并且所有对触摸的处理必须在onTouchEvent()中发生。
3. 如果此方法返回false,接下来的事件(up to and including the final up)将最先被传递当此,然后是目标的onTouchEvent()。
4. 如果返回true,将不会收到以下任何事件:目标view将收到同样的事件但是会伴随ACTION_CANCEL,并且所有的更进一步的事件将会传递到你自己的onTouchEvent()方法中而不会再在这里出现。
参数
ev 体系向下发送的动作事件
返回值
如果将运动事件从子视图中截获并且通过onTouchEvent()发送到当前ViewGroup ,返回true。当前目标将会收到ACTION_CANCEL事件,并且不再会有其他消息传递到此。
(译者注:onInterceptTouchEvent和onTouchEvent调用时序)
public boolean onTouchEvent (MotionEvent ev)
执行此方法为了处理触摸屏幕的运动事件。
参数
ev 运动事件
返回值
事件被处理返回true,其它返回false。
public boolean pageScroll (int direction)
响应短按“page up/ down”时候对滚动的处理。此方法将向上或者向下滚动一屏,并且将焦点置于新可视区域的最上/最下。如果没有适合的component作为焦点,当前scrollView将收回焦点。
参数
direction 滚动方向:FOCUS_UP表示向上翻一页,FOCUS_DOWN表示向下翻一页。
返回值
此key事件被消耗(cosumed)返回true,其他返回false。
public void requestChildFocus (View child, View focused)
当父视图的一个子视图的要获得焦点时,调用此方法。
参数
child 要获得焦点的父视图的子视图。此视图包含了焦点视图。如果没有特殊徐要求,此视图实际上就是焦点视图。
focused 子视图的子孙视图并且此子孙视图是真正的焦点视图
public boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)
当组里的某个子视图需要被定位在屏幕的某个矩形范围时,调用此方法。重载此方法的ViewGroup可确认以下几点:
* 子项目将是组里的直系子项
* 矩形将在子项目的坐标体系中
重载此方法的ViewGroup应该支持以下几点:
* 若矩形已经是可见的,则没有东西会改变
* 为使矩形区域全部可见,视图将可以被滚动显示
参数
child 发出请求的子视图
rectangle 子项目坐标系内的矩形,即此子项目希望在屏幕上的定位
immediate 设为true,则禁止动画和平滑移动滚动条
返回值
进行了滚动操作的这个组(group),是否处理此操作。
public void requestLayout ()
当有改变引起当前视图重新布局时,调用此函数。它将规划一个视图树的layout路径。
public void scrollTo (int x, int y)
设置当前视图滚动到的位置。此函数会引起对onScrollChanged(int, int, int, int)函数的调用并且会让视图更新。
当前版本取消了在子视图中的滚动。
参数
x 滚动到的X位置
y 滚动到的Y位置
public void setFillViewport (boolean fillViewport)
设置当前滚动视图是否将内容高度拉伸以填充视图可视范围(译者注:viewport可视范围,参见决定Scrollviewer里面Control的可视范围)。
参数
fillViewport 设置为true表示拉伸内容高度来适应视口边界;其他设为false。
public void setOverScrollMode (int mode)
为视图设置over-scroll模式。有效的over-scroll模式有OVER_SCROLL_ALWAYS(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS(只允许当视图内容大过容器时,进行over-scrolling)和OVER_SCROLL_NEVER。只有当视图可以滚动时,此项设置才起作用。
(译者注:这个函数是2.3 r1 中新增的,API Level 9。关于over-scroll这里译为弹性滚动,即,参见帖子:类似iPhone的弹性ListView滚动)
参数
mode The new over-scroll mode for this view.
public void setSmoothScrollingEnabled (boolean smoothScrollingEnabled)
用来设置箭头滚动是否可以引发视图滚动。
参数
smoothScrollingEnabled 设置箭头滚动是否可以引起内容的滚动的bool值
public final void smoothScrollBy (int dx, int dy)
类似于scrollBy(int, int),但是滚动时候是平缓的而不是立即滚动到某处。
参数
dx 在X方向滚动的像素数
dy 在Y方向滚动的像素数
public final void smoothScrollTo (int x, int y)
类似于scrollTo(int, int),但是滚动时候是平缓的而不是立即滚动到某处。
参数
x 要滚动到位置的X坐标
y 要滚动到位置的Y坐标
五、受保护方法
protected int (Rect rect)
计算X方向滚动的总合,以便在屏幕上显示子视图的完整矩形(或者,若矩形宽度超过屏幕宽度,至少要填满第一个屏幕大小)。
参数
rect 矩形
返回值
滚动差值
protected int computeVerticalScrollOffset ()
计算垂直方向滚动条的滑块的偏移。此值用来计算滚动条轨迹的滑块的位置。
范围可以以任意单位表示,但是必须与computeVerticalScrollRange()和computeVerticalScrollExtent()的单位一致。
缺省的偏移是在当前视图滚动的偏移。
返回值
滚动条的滑块垂直方向的偏移。
protected int computeVerticalScrollRange ()
滚动视图的可滚动范围是所有子元素的高度。
返回值
由垂直方向滚动条代表的所有垂直范围,缺省的范围是当前视图的画图高度。
protected float getBottomFadingEdgeStrength ()
返回滚动底部的能见度。能见度的值的范围是0.0(没有消失)到1.0(完全消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。
返回值
滚动底部能见度,值的范围在浮点数0.0f到1.0f之间。
protected float getTopFadingEdgeStrength ()
返回滚动顶部的能见度。能见度的值的范围是0.0(没有消失)到1.0(完全消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。
返回值
滚动顶部能见度,值的范围在浮点数0.0f到1.0f之间。
protected void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)
要求当前视图的一个子视图测量自己,同时兼顾到当前视图的MeasureSpec的要求和它的空白。子视图必须有MarginLayoutParams。比较复杂的工作是在getChildMeasureSpec中完成的。
参数
child 需要自己测量的子视图
parentWidthMeasureSpec 当前视图要求的宽度
parentHeightMeasureSpec 当前视图要求的宽度
protected void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)
要求当前视图的一个子视图测量自己,同时兼顾到当前视图的MeasureSpec的要求和它的空白和边界。子视图必须有MarginLayoutParams。比较复杂的工作是在getChildMeasureSpec中完成的。
参数
child 需要测量的子视图
parentWidthMeasureSpec 当前视图要求的宽度
widthUsed 水平方向上由父视图使用的空白 (也可能是视图的其他子视图使用的)
parentHeightMeasureSpec 当前视图要求的宽度
heightUsed 垂直方向上由父视图使用的空白 (也可能是视图的其他子视图使用的)
protected void onLayout (boolean changed, int l, int t, int r, int b)
当前视图需要为子视图分配大小和位置时候调用,子类继承必须要重载此方法并调用自己子视图的layout函数。
参数
changed 当前视图的新的大小或者位置
l 相对父视图,左边界位置
t 相对父视图,上边界位置
r 相对父视图,右边界位置
b 相对父视图,下边界位置
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
测量视图以确定其内容宽度和高度。此方法被measure(int, int)调用。需要被子类重写以提供对其内容准确高效的测量。
约定:当重写此方法时,你必须调用setMeasuredDimension(int, int)来保存当前视图view的宽度和高度。不成功调用此方法将会导致一个IllegalStateException异常,是由measure(int, int)抛出。所以调用父类的onMeasure(int, int)方法是必须的。
父类的实现是以背景大小为默认大小,除非MeasureSpec(测量细则)允许更大的背景。子类可以重写onMeasure(int,int)以对其内容提供更佳的尺寸。
如果此方法被重写,那么子类的责任是确认测量高度和测量宽度要大于视图view的最小宽度和最小高度(getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()),使用这两个方法可以取得最小宽度和最小高度。
参数
widthMeasureSpec 受主窗口支配的水平空间要求。这个需求通过 View.MeasureSpec.进行编码。
heightMeasureSpec 受主窗口支配的垂直空间要求。这个需求通过 View.MeasureSpec.进行编码。
protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)
被overScrollBy(int, int, int, int, int, int, int, int, boolean)调用,来对一个over-scroll操作的结果进行响应。(译者注:这个函数是2.3 r1 中新增的,API Level 9)
参数
scrollX 新的X滚动像素值
scrollY 新的Y滚动像素值
clampedX 当scrollX被over-scroll的边界限制时,值为true
clampedY 当scrollY被over-scroll的边界限制时,值为true
protected boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)
当在滚动视图的子视图中查找焦点视图时,需要注意不要将焦点设置在滚动出屏幕外的控件上。此方法会比执行缺省的ViewGroup代价高,否则此行为也会设置为缺省
参数
direction 指定下列常量之一:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT
previouslyFocusedRect 能够给出一个较好的提示的矩形(当前视图的坐标系统)表示焦点从哪里得来。如果没有提示为null。
返回值
是否取得了焦点
protected void onSizeChanged (int w, int h, int oldw, int oldh)
布局期间当视图的大小发生改变时调用。如果只是添加到视图,调用时显示的是旧值0。(译者注:也就是添加到视图时,oldw和oldh返回的是0)。
参数
w 视图当前宽度
h 视图当前高度
oldw 视图改变前的宽度
oldh 视图改变前的高度
⑶ Android UI设计的基本元素有哪些
移动端的App界面,不论是iOS还是Android ,一般都由四个元素组成,分别是:状态栏(status bar)、导航栏(navigation)、主菜单栏(submenu)、内容区域(content)。
状态栏:主要用于显示信号、运营商、电量等手机状态的区域;
导航栏:主要显示当前界面的名称,包含相应的功能或者页面间的跳转按钮;
主菜单栏:类似于页面的主菜单,提供整个应用的分类内容的快速跳转;
内容区域:展示应用提供的相应内容;
需要注意的一点就是,由于Android在4.0之后移除了实体键而使用屏幕下方的虚拟键,所以,Android将iOS中的主菜单从下方移动到了上方,从而避免误操作虚拟键。
说到这里,就不得不说,虽然android和iOS都是移动端的操作系统,但是他们在UI设计还是存在很大的差异性。这是为什么呢? 其实这基本上都是因为iOS的闭源导致的,由于它的商业化,导致很多设计被申请了专利,Android在很多地方都必须有所不同,说的最多的就是iOS的弹性滚动,其实Android的ScrollView要实现这样的效果,只需要修改一个参数的值即可,但是由于这个效果iOS申请的专利,所以Android就无法使用了。
⑷ 怎样从零开始学习安卓软件开发
1、Java se基础
1).Java基本数据类型与表达式,分支循环。
2).String和StringBuffer的使用、正则表达式。
3).面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类。
4).对象实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析;对象的多态性:子类和父类之间的转换、抽象类和接口在多态中的应用、多态带来的好处。
5).Java异常处理,异常的机制原理。
6).常用的设计模式:Singleton、Template、Strategy模式。
7).JavaAPI介绍:种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。
8).Java集合介绍:Collection、Set、List、ArrayList、LinkedList、Hashset、Map、HashMap、Iterator等常用集合类API。
9).JavaI/O输入输出流:File和FileRandomAccess类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。
10).Java高级特性:反射和泛型。
11).多线程原理:如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁。
2、android UI编程
1)、Android开发环境搭建:Android介绍,Android开发环境搭建,第一个Android应用程序,Android应用程序目录结构。
2)、Android初级控件的使用:
TextView控件的使用
Button控件的使用方法
EditText控件的使用方法
ImageView的使用方法
RadioButton的使用方法
Checkbox的使用方法
Menu的使用方法
3)、Android高级控件的使用:
ListView的使用方法
GridView的使用方法
Adapter的使用方法
Spinner的使用方法
Gallary的使用方法
ScrollView的使用方法
RecyclerView
4、对话框与菜单的使用:
Dialog的基本概念
BlockquoteAlertDialog的使用方法
DatePickerDialog的使用方法
Menu的使用方法
自定义Menu的实现方法
5.控件的布局方法:
线性布局的使用方法
相对布局的使用方法
6.多Acitivity管理:
AndroidManifest.xml文件的作用
Intent的使用方法
使用Intent传递数据的方法
启动Activity的方法
IntentFilter的使用方法
Activity Group的使用方法
7、自定义控件实现方法:
自定义ListView的实现方法
可折叠ListView的使用方法
自定义Adapter的实现方法
自定义View的实现方法
动态控件布局的上实现方法
上拉刷新下拉加载更多
3、android网络编程与数据存储
1).基于Android平台的HTTP通讯:
Http协议回顾
使用Get方法向服务器提交数据的方法
使用POST方法向服务器提交数据的实现方法
使用Http协议实现多线程下载
使用Http协议实现断点续传
2).Android数据存储技术:
SQLite3数据库简介
SQL语句回顾
SQLite3编程接口介绍
SQLite3事务管理
SQLite3游标使用方法
SQLite3性能分析
访问SDCard的方法
访问SharedPreferences的方法
初级工程师
技术要求:
基本知识点
比如四大组件如何使用、如何创建Service、如何进行布局、简单的自定义View、动画等常见技术
书籍推荐
《第一行代码 Android》、《疯狂Android》
中级工程师
技术要求:
稍微深入的知识点
AIDL、Messenger、Binder、多进程、动画、滑动冲突、自定义View、消息队列等
书籍推荐
《Android开发艺术探索》、《Android群英传》
AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的区别;
Binder:从Java层大概理解Binder的工作原理,懂Parcel对象的使用;
多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等;
事件分发:弹性滑动、滑动冲突等;
玩转View:View的绘制原理、各种自定义View;
动画系列:熟悉View动画和属性动画的不同点,懂属性动画的工作原理;
懂性能优化、熟悉mat等工具
懂点常见的设计模式
搞懂view的滑动原理
搞懂如何实现弹性滑动
搞懂view的滑动冲突
搞懂view的measure、layout和draw
然后再学习几个已有的自定义view的例子
最后就可以搞定自定义view了,所谓万变不离其宗
高级工程师
技术要求:
稍微深入的知识点
系统核心机制
基本知识点的细节
设计模式和架构
书籍推荐
《Android开发艺术探索》、《Android 源码设计模式解析与实战》、《Android内核剖析》
继续加深理解”稍微深入的知识点“中所定义的内容
了解系统核心机制:
了解SystemServer的启动过程
了解主线程的消息循环模型
了解AMS和PMS的工作原理
能够回答问题”一个应用存在多少个Window?“
了解四大组件的大概工作流程
…
基本知识点的细节
Activity的启动模式以及异常情况下不同Activity的表现
Service的onBind和onReBind的关联
onServiceDisconnected(ComponentName className)和binderDied()的区别
AsyncTask在不同版本上的表现细节
线程池的细节和参数配置
…
熟悉设计模式,有架构意识学习方法
-----------------------------------------------------------------
作者:小码同学
链接:https://zhuanlan.hu.com/p/163528281
来源:知乎
着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。