galleryview,galleryviewandroid
今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!
第一、可以通过Matrix对象来变换图像,在选择的时候放大,在失去焦点的时候,缩小到原来的大小。
float scaleWidth=(float)(scale*width);
float scaleHeight=(float)(scale*height);
Log.i("size:", scaleWidth+"");
matrix.postScale(scaleWidth, scaleHeight);
bm= Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
<?xml version="1.0" encoding="utf-8"?>
xmlns:android="schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
view.setLayoutParams(new Gallery.LayoutParams(150,150));
int mCounts= g.getCount()- 1;
if(position>0&&(position< mCounts)){
g.getChildAt(position- 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
g.getChildAt(position+ 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
g.getChildAt(position+ 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
g.getChildAt(position- 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
注释:其中(136, 88)是gallery中图片的大小,是在ImageAdapter里面设置的。(150,150)是选中图片放大后的大小,可以随便设置,只要跟(136, 88)区别就行了,是为了观察变化,我设置的是150而已。
第四、通过动画和LayoutParam结合
gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
void onItemSelected(AdapterView<?> arg0, View arg1,
if(tempView!= null&& v.hashCode()!= tempView.hashCode()){
tempView.setLayoutParams(new Gallery.LayoutParams(50,50));
v.setLayoutParams(new Gallery.LayoutParams(60,60));
//v.setLayoutParams(new Gallery.LayoutParams(130,130));
tvName.setText(tempList.get(arg2).getPicName());
void onNothingSelected(AdapterView<?> arg0){
tvName.setText("Nothing selected.");
1、Android的UI界面都是由View和ViewGroup及其派生类组合而成的。
2、其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的.
3、View对象是Android平台中用户界面体现的基础单位。
4、View类是它称为“widgets(工具)”的子类的基础,它们提供了诸如文本输入框和按钮之类的UI对象的完整实现。
5、ViewGroup类同样为其被称为“Layouts(布局)”的子类奠定了基础,它们提供了象流式布局、表格布局以及相对布局之类的布局架构。
6、一般来说,开发Android应用程序的UI界面都不会直接使用View和ViewGroup,而是使用这两大基类的派生类。
7、View派生出的直接子类有:AnalogClock,ImageView,KeyboardView, ProgressBar,SurfaceView, TextView,ViewGroup,ViewStub
8、View派生出的间接子类有:AbsListView,AbsSeekBar, AbsSpinner, AbsoluteLayout, AdapterView,AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, AutoCompleteTextView,Button,CalendarView, CheckBox, CheckedTextView, Chronometer, CompoundButton,
9、ViewGroup派生出的直接子类有:AbsoluteLayout,AdapterView,FragmentBreadCrumbs,FrameLayout, LinearLayout,RelativeLayout,SlidingDrawer
10、ViewGroup派生出的间接子类有:AbsListView,AbsSpinner, AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, CalendarView, DatePicker, DialerFilter, ExpandableListView, Gallery, GestureOverlayView,GridView,HorizontalScrollView, ImageSwitcher,ListView,
11、这里特别指出,ImageView是布局具有图片效果的UI常用的类,SurfaceView是用来进行游戏开发的与一般View相比较为特殊的非常重要的类,而AbsoluteLayout、 FrameLayout,LinearLayout, RelativeLayout这几个ViewGroup的直接子类是Android UI布局中最基本的布局元素。
12、自定义控件(自定义View和ViewGroup)
13、DV6300-T的节目编辑就是自定义ViewGroup的使用
14、关于自定义ViewGroup的知识,我们可以参考E:\JAVA\Android\资料\网络资料\应用列表滑动总结\AppList测试代码,会有更深刻的认识。
15、给大家介绍下View和ViewGroup最重要的几个方法——
16、protected void onDraw(Canvas canvas):View类中用于重绘的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,也是Android UI绘制最重要的方法。开发者可重载该方法,并在重载的方法内部基于参数canvas绘制自己的各种图形、图像效果。
17、protected void onLayout(boolean changed, int left, int top, int right, int bottom):View类中布局发生改变时会调用的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,重载该类可以在布局发生改变时作定制处理,这在实现一些特效时非常有用。
18、protected void dispatchDraw(Canvas canvas):ViewGroup类及其派生类具有的方法,这个方法主要用于控制子View的绘制分发,重载该方法可改变子View的绘制,进而实现一些复杂的视效,典型的例子可参见Launcher模块Workspace的dispatchDraw重载。
19、protected boolean drawChild(Canvas canvas, View child, long drawingTime)):ViewGroup类及其派生类具有的方法,这个方法直接控制绘制某局具体的子view,重载该方法可控制具体某个具体子View。
20、addView方法这个方法是用来想View容器中添加组件用的。我们可以使用这个方法想这个ViewGroup中添加组件。
21、getChildAt方法这个方法用来返回指定位置的View。
22、注意:ViewGroup中的View是从0开始计数的。
23、View在屏幕上显示出来要先经过measure(计算)和layout(布局).
24、onMeasure(int, int) View会调用此方法,来确认自己及所有子对象的大小
25、onLayout(boolean, int, int, int, int, int, int)当View要为所有子对象分配大小和位置时,调用此方法
26、onSizeChanged(int, int, int, int)当View大小改变时,调用此方法
27、protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)介绍:
28、onMeasure传入的widthMeasureSpec和heightMeasureSpec不是一般的尺寸数值,而是将模式和尺寸组合在一起的数值。
29、一般是根据xml文件中定义得到的,我们可以根据这2个参数知道模式和size。
30、我们需要通过int mode= MeasureSpec.getMode(widthMeasureSpec)得到模式,
31、用int size= MeasureSpec.getSize(widthMeasureSpec)得到尺寸。
32、mode共有三种情况,取值分别为MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, MeasureSpec.AT_MOST。
33、-2147483648----xml文件中的wrap_content----MeasureSpec.AT_MOST
34、1073741824----xml文件中的fill_parent-----MeasureSpec.EXACTLY
35、一般ViewGroup,我们是这样实现的:
36、protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
37、super.onMeasure(widthMeasureSpec, heightMeasureSpec);
38、final int width= MeasureSpec.getSize(widthMeasureSpec);
39、final int widthMode= MeasureSpec.getMode(widthMeasureSpec);
40、final int count= getChildCount();
41、for(int i= 0; i< count; i++){
42、//其实,对于我们自己写的应用来说,最好的办法是去掉框架里的该方法,直接调用view.measure(),如下:
43、//一般我们设定ViewGroup的XML布局是wrap_content,这样2个参数就是-2147483648,那么我们如下调用就是
44、getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
45、//整个measure()过程就是个递归过程
46、//该方法只是一个过滤器,最后会调用measure()过程;或者 measureChild(child, h, i)方法
47、//measureChildWithMargins(getChildAt(i)., h, i);
48、scrollTo(mControl.getCurScreen()* width, 0);
49、当然我们也可以调用setMeasuredDimension(h, l);来设定ViewGroup的大小。
50、至于View的onMeasure实现,我们其实一般都不覆写该方法,覆写的话也简单,根据需要,和上面一样,根据传入的2个参数获取当前的模式和大小。
51、当然我们也可以自己计算大小,调用setMeasuredDimension设定。
52、protected void onLayout(boolean changed, int l, int t, int r, int b){
53、final int childCount= getChildCount();
54、for(int i= 0; i< childCount; i++){
55、final View childView= getChildAt(i);
56、final int childWidth= childView.getMeasuredWidth();
57、final int childHeight= childView.getMeasuredHeight();
58、childView.layout(childLeft, 0, childLeft+ childWidth,childHeight);
59、实际上很简单,就是调用layout方法来设定View在画布上的位置,可以超出屏幕宽度,然后我们可以滚动显示。
60、当然我们也可以调用layout传入相关坐标来设定View显示位置(已验证OK)
61、E:\JAVA\Android\资料\网络资料\应用列表滑动总结\AppList
62、E:\JAVA\Android\资料\网络资料\View和ViewGroup\ViewGruop_ViewTest
wwW.Xtw.Com.cN系统网专业的PC、手机系统开发下载平台,HarmonyOS系统、安卓、OS、windows电脑重装系统在线下载安装,操作系统平台技术学习,攻略教程,技术交流。
免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!
联系邮箱:773537036@qq.com