android的这种listview动画效果果的listview是怎么做出来的

android如何能实现IPhone中的“弹性”和“惯性”的UI效果?例如,在一个ListView界面上,用手指在屏亩上快速向下滑动,让ListView向下滚动,IPhone有这种效果:1.当手指离开后,ListView好像实际_百度作业帮
android如何能实现IPhone中的“弹性”和“惯性”的UI效果?例如,在一个ListView界面上,用手指在屏亩上快速向下滑动,让ListView向下滚动,IPhone有这种效果:1.当手指离开后,ListView好像实际物体一样,具有“惯性”,不会立即停止,而是会根据手指的力度和速度继续向下滚动若干位置。2.如果滚动超出边界,松开手指后,ListView好像具备弹性,又弹回合适的位置。这种效果给人的体验确实不一样,android中能实现吗?
泽田27丶TA催
ListView拉多了不是会弹回去吗 这就是你要的弹性效果?
扫描下载二维码今天看啥 热点:
自定义ListView实现中间项动态变大的效果(不是自定义Adapter),listviewadapter
为什么强调不是自定义Adapter,因为我这个自定义控件是来源与公司新做的项目,刚开始在百度上找了一圈,都说是自定义ListView ,点进去却是自定义Adaper,有的人就会说你是不是太较真了,自定义Adapter就基本可以实现各种效果了,何必要自定义Listview,今天我做的这个还确实不好用Adapter做,先上效果图,右边的动图来源于左边这个项目中的一个控件。
因为我们的项目中,六个通道的检测过程要同时动态显示,这样位置就要合理调配,因为六个通道采用的布局比较相似,所以当时考虑了Fragment或者自定义控件,后来,因为下面的四个按钮要对应四个不同的页面,也就需要使用viewpager+fragment,fragment中是不支持再用fragment的,而且每个通道的检测步骤会根据检测的项目类型而有所不同,所以,就只能采用自定义控件了。
说到自定义控件,就先要确定用哪种,不管你们怎么看,反正我第一眼看上去和listview 接近,我就先考虑自定义Listview了,刚开始也想用自定义adapter,我们要实现的是,给定item个数算出item高度并设置,我就想到了在自定义Listview中的onLayout中得到自定义Listview的高度,然后公共方法将Listview高度暴露出去,然后在adapter的getView 中得到自定义Listview的高度并计算设置item高度,事实证明,我想多了,item的getView方法是在Listview的onLayout方法前面执行的,有图为证
为了找这个错误浪费我好多时间,说出来都是泪啊
那么尺寸参数就只能在自定义Listview中搞定了,动态item状态也是要在自定义ListView中搞定。
那我们的步骤就分清楚了
1.自定义adapter,动态给ListView中定个数
2.自定义Listview,给item设置尺寸信息,并实现滚动过程逻辑
3.在MainActivity中将数据绑定到自定义ListView.
先给出LvAdapter 的代码
import android.animation.ValueA
import android.content.C
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.widget.BaseA
import android.widget.TextV
* Created by lv on .
public class LvAdapter extends BaseAdapter {
private String[]
private boolean b =
public LvAdapter(String[] atrs, Context context) {
this.strs =
this.context =
public int getCount() {
return strs.
public Object getItem(int position) {
return strs[position];
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup parent) {
ViewHold viewH
if (convertView == null) {
viewHold = new ViewHold();
convertView = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);
convertView.setTag(viewHold);
viewHold = (ViewHold) convertView.getTag();
viewHold.textView = (TextView) convertView.findViewById(R.id.textview);
viewHold.textView.setText(strs[position]);
viewHold.textView.setTextSize(25);
if (position == 1) {
startScaleTo(convertView, 0.6f, 1.0f);
startScaleTo(convertView, 1.0f, 0.6f);
return convertV
public void startScaleTo(final View view, float start, float end) {
ValueAnimator animator = ValueAnimator.ofFloat(start, end);
animator.setDuration(500);
animator.start();
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
view.setScaleX(value);
view.setScaleY(0.4f + (0.6f * value));
public class ViewHold {
public TextView textV
里面的一般设置,我都不用讲了,你们应该也写到不能乱熟的了,至于复用的问题,应该也难不倒。我就解释这一句
if (position == 1) {
startScaleTo(convertView, 0.6f, 1.0f);
startScaleTo(convertView, 1.0f, 0.6f);
}这就是初次加载item内容的时候,将除了第二个外的所有item缩小(给人的错觉就是中间那个放大了)
再贴出R.layout.item_layout.xml中的代码,一并把item_background.xml也贴出
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:padding=&20dp&&
android:id=&@+id/textview&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:gravity=&center&
android:text=&正在预温&
android:background=&@drawable/item_background&/&
&/LinearLayout&
item_background.xml
&?xml version=&1.0& encoding=&utf-8&?&
&shape xmlns:android=&/apk/res/android&&
android:width=&2dp&
android:color=&@android:color/holo_orange_dark&
android:radius=&150dp&
这两个文件不用解释,比较简单,就是决定了每个item的外观
然后就是今天的主角LvListView登场了,代码一段一段的贴,保证贴全,先贴出一些全局变量,后面对照着看
import android.animation.ValueA
import android.content.C
import android.content.res.TypedA
import android.util.AttributeS
import android.util.L
import android.view.MotionE
import android.view.V
import android.view.ViewG
import android.widget.AbsListV
import android.widget.LinearL
import android.widget.ListV
* TODO: document your custom view class.
public class LvListView extends ListView implements AbsListView.OnScrollListener {
* 显示在屏幕上多少个item
private int showItemC
* 每个item的高度
private int itemH
* 记录第一个显示的item
* 从第几行执行动画
private int scaleFlagIndex = 1;
* 是否到了最后一行
private boolean lastFlag =
private int step = 0;
* 步骤个数
private int stepC
接下来贴构造方法:
public LvListView(Context context) {
this(context, null);
public LvListView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
* 构造方法中拿到自定义属性showViewCount,并设置滚动监听
* @param context
* @param attrs
* @param defStyleAttr
public LvListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//获取showViewCount
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LvListView);
showItemCount = typedArray.getInt(R.styleable.LvListView_showViewCount, 0);
typedArray.recycle();
//设置一个滚动监听
setOnScrollListener(this);
} 构造方法中,做了两件事情:得到自定义属性中,用户设置的要显示的item的个数,我们后面设置为3,顺便贴出自定义属性的文件
&resources&
&declare-styleable name=&LvListView&&
&attr name=&showViewCount& format=&integer& /&
&/declare-styleable&
&/resources& 接下来重写onLayout方法来得到LvListView的尺寸来设置item的尺寸大小
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (changed) {
itemHeight = this.getHeight() / showItemC
for (int i = 0; i & getChildCount(); i++) {
LinearLayout layout = (LinearLayout) getChildAt(i);
AbsListView.LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, itemHeight);
layout.setLayoutParams(layoutParams);
stepCount = getAdapter().getCount() - 2;
} 其中,这一段弄的我很费解
LinearLayout layout = (LinearLayout) getChildAt(i);
AbsListView.LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, itemHeight);
layout.setLayoutParams(layoutParams); 但是也是困扰我好久,刚开始用的ViewGroup.LayoutParams,总是报错java.lang.ClassCastException:android.widget.LinearLayout$LayoutParams cannot be cast toandroid.widget.AbsListView$LayoutParams
&,我用反射得到getChildAt(i)的类型,是一个AbsListView类型,我表示很费解,明明我上面item布局的外层是一个LinearLayout布局,原因我找到了,是因为我的adapter中LayoutInflater.from(context).inflate(R.layout.item_layout, parent,false)这一句,虽然后面带的false,让效果没有实现,但是布局上的关系已经存在了,因为LayoutInflater.from(context).inflate(R.layout.item_layout,
null)写会报警告,在外国一个网站上看到有说这种写法不标准,会出现问题(ps:虽然不知道什么问题,但是未知的问题是最可怕的,我就不试了),所以就将这个布局参数类型改了,改成了AbsListView.LayoutParams,反正不报错了就好。接着stepCount = getAdapter().getCount() - 2;是给步骤个数赋值,为甚么要减去2呢,因为第一步骤和最后一步我们压根就不走,不理解请看前面和下面动态图。
重写onTouchEvent
* 禁用手指滑动
* @param ev
public boolean onTouchEvent(MotionEvent ev) {
}注释很详细,不改释
接下里,缩放动画
* 缩放动画
* @param view
* @param start
* @param end
public void startScaleAnimator(final View view, float start, float end) {
ValueAnimator animator = ValueAnimator.ofFloat(start, end);
animator.setDuration(500);
animator.start();
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
view.setScaleX(value);
view.setScaleY(0.4f + (0.6f * value));
}这里说一下,顺便把adapter中的一并解释了,因为我们的item是一个不高但是很宽的控件,那么横向缩放和纵向缩放不能采用统一标准,横向缩放就用传过来的值,但是纵向缩放就把值计算了一下,通过0.4f + (0.6f * value)后,就将缩放的区间减小了, 请带入同样0-1之间的值进去算,这里强调一下,小数的后面一定要带f,小心数据丢失。
接下来,就是我们的下一步按钮调用的方法了,后面我们公司的功能是弄到其它代码中调用的,不是用按钮
* 设置滚动到指定item
public void scrollToItem() {
if (step == stepCount) {
this.lastFlag =
startScaleAnimator(getChildAt(scaleFlagIndex), 1.0f, 0.6f);
this.smoothScrollToPositionFromTop(step, 0, 1000);
this.smoothScrollToPositionFromTop(step, 0, 500);
step++是将步骤后推一步,也就是下一步,if (step == stepCount)判断是否到了最后一步,如果到了没有到最后一步,调用smoothScrollToPositionFromTop滚动到指定item,第二个参数是从视图顶部所需的距离在&代码&位置&/ code&的像素滚动时结束,这一句是不是没懂?别问我,我也没懂,反正我没用,我就设置为0,第三个参数是滚动时间,至于插值器什么的,完全不用关心。如果到了最后一步,设置步骤step为0,将lastFlag标志改为true,后面会用到,startScaleAnimator(getChildAt(scaleFlagIndex),
1.0f, 0.6f);是将最后放大了的那个item缩小,&this.smoothScrollToPositionFromTop(step, 0, 1000);至于为什么要给1000毫秒,因为从最后一个滚动到最前面,滚动的item太多,时间太短就不好看了。
接下来就是LvListView中的重点了,实现AbsListView.OnScrollListener接口并实现其中的两个抽象方法
public void onScrollStateChanged(AbsListView view, int scrollState) {
Log.e(&onScrollStateChanged&, &scrollState--& + scrollState);
if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
if (!lastFlag) {
startScaleAnimator(view.getChildAt(scaleFlagIndex), 1.0f, 0.6f);
startScaleAnimator(view.getChildAt(scaleFlagIndex + 1), 0.6f, 1.0f);
scaleFlagIndex = 2;
} else if (scrollState == OnScrollListener.SCROLL_STATE_IDLE && lastFlag) {
this.lastFlag =
scaleFlagIndex = 1;
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
Log.e(&onScroll&, &firstVisibleItem--& + firstVisibleItem);
}前者就是在listview每次往下滚动一下的时候,动态设置item的动画效果的逻辑了,AbsListView view表示当前显示在屏幕上的Listview的item的容器,scrollState就是当前listview的状态,scrollState有三种状态,分别是空闲(滚动完成),滚动中,开始滚动,&span style=&white-space:pre&& &/span&public static int SCROLL_STATE_IDLE = 0;
public static int SCROLL_STATE_TOUCH_SCROLL = 1;
public static int SCROLL_STATE_FLING = 2;我们点下一步的时候,动画肯定是要在滚动开始的时候同步播放的,所以if
(scrollState == OnScrollListener.SCROLL_STATE_FLING)就是在滚动中设置滚动的时候同时播放动画面让第二个item缩小,点的是下一步,第一个item会消失,第二个会到第一个的位置,所以这么弄,i因为f (lastFlag)的时候,动画效果是在scrollToItem设置的,这里设置就重复了,所以套一个f (!lastFlag)条件,每次结束的时候都设置一下this.lastFlag =表示没有到最后一步,至于scaleFlagIndex
= 1或者等于2的问题,这个问题很奇怪,回到item头部的时候,view.getChildAt(1)就会在第一个,所以这么设置一下,就会区别对待头部的第一次点击。
接下来说说onScroll,这个是在滚动中执行多次的方法,应该是我们用代码调用滚动的原因,我用log打印其中的值,不管怎么滚动,里面的四个值都太坚强,一动不动,这也是我为什么会采用属性动画这种性能相对比较低的方法来实现效果的原因。
最后,附上源码,因为要学习csdn课堂里面的知识,所以要了点分,有分的捧个场,没分的在联系我给你
相关搜索:
相关阅读:
相关频道:
Android教程最近更新android&listview每个item定义动画呈现
LayoutAnimationsController
1、什么是LayoutAnimationsController
LayoutAnimationsController可以用于实现使多个控件按顺序一个一个的显示。
1)LayoutAnimationsController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置统一的动画效果。
2)每一个控件都有相同的动画效果。
3)控件的动画效果可以在不同的时间显示出来。
4)LayoutAnimationsController可以在xml文件当中设置,以可以在代码当中进行设置。
2、在xml当中使用LayoutAnimationController
1)在res/anim文件夹下创建一个名为list_anim_layout.xml文件:
android:dylay -动画间隔时间;
android:animationOrder
-动画执行的循序(normal:顺序,random:随机,reverse:反向显示)
android:animation &引用动画效果文件
&layoutAnimation
&&&xmlns:android="/apk/res/android"
&&&android:delay="0.5"
&&&android:animationOrder="normal"
&&&android:animation="@anim/list_anim"/&
2)创建list_anim.xml文件,设置动画效果
version="1.0"&encoding="utf-8"?&
xmlns:android="/apk/res/android"
&&&android:interpolator="@android:anim/accelerate_interpolator"
&&&android:shareInterpolator="true"&
&&&&&&android:fromAlpha="0.0"
&&&&&&android:toAlpha="1.0"
&&&&&&android:duration="1000"/&
3)在布局文件main.xml当中为ListVIew添加如下配置
&&&&&&android:id="@id/android:list"
&&&&&&android:layout_width="fill_parent"
&&&&&&android:layout_height="wrap_content"
&&&&&&android:scrollbars="vertical"
&&&&&&android:layoutAnimation="@anim/list_anim_layout"/&
已投稿到:android的这种动画效果的listview是怎么做出来的_百度知道
android的这种动画效果的listview是怎么做出来的
我有更好的答案
自定义adapter面进行布局布局listview面item式放listviewactivity面实现OnItemClickListener接口让listviewset监听点击每item候监听监听接口面intent另外activityid通intent带
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁ListView,GridView之LayoutAnimation特殊动画的实现 - 短裤党 - ITeye技术网站
博客分类:
LayoutAnimation干嘛用的?不知道的话网上搜一下。
有两种用法,我的通常写在代码中,像下面这样:
* Layout动画
protected LayoutAnimationController getAnimationController() {
int duration=300;
AnimationSet set = new AnimationSet(true);
Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(duration);
set.addAnimation(animation);
animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
-1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
animation.setDuration(duration);
set.addAnimation(animation);
LayoutAnimationController controller = new LayoutAnimationController(set, 0.5f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
应用的时候只需这样:
listView = (ListView) findViewById(R.id.listView);
listView.setLayoutAnimation(getAnimationController());
adapter = new ListViewAdapter(stores);
listView.setAdapter(adapter);
这样一个简单的LayoutAnimation就完成了。
别看到这里就以为文章就完了,以上都是些小玩意。呵呵,还有更厉害的!
你想设置更炫的动画吗?LayoutAnimation通常是Item一个一个的出现,有某种规律的。想让每个Item都有自己的动画吗?那就继续看下去。
private int duration=1000;
private Animation push_left_in,push_right_
private Animation slide_top_to_bottom,slide_bottom_to_
public ListViewAdapter(ArrayList&Store& list) {
this.list =
push_left_in=AnimationUtils.loadAnimation(context, R.anim.push_left_in);
push_right_in=AnimationUtils.loadAnimation(context, R.anim.push_right_in);
slide_top_to_bottom=AnimationUtils.loadAnimation(context, R.anim.slide_top_to_bottom);
slide_bottom_to_top=AnimationUtils.loadAnimation(context, R.anim.slide_bottom_to_top);
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
hodler = new ViewHodler();
convertView = LayoutInflater.from(context).inflate(
R.layout.simple_item_7_for_main, null);
convertView.setTag(hodler);
if (position % 2 == 0) {
push_left_in.setDuration(duration);
convertView.setAnimation(push_left_in);
push_right_in.setDuration(duration);
convertView.setAnimation(push_right_in);
/*if(position==0){
slide_bottom_to_top.setDuration(duration);
convertView.setAnimation(slide_bottom_to_top);
slide_top_to_bottom.setDuration(duration);
convertView.setAnimation(slide_top_to_bottom);
hodler = (ViewHodler) convertView.getTag();
return convertV
看见上面的动画设置了吗?将动画写在getView()中,这样可以设置很多不同的动画。其实这不属于LayoutAnimation的范畴了。
你可以试一下,如果设计好的话,可以有比LayoutAnimation更酷的效果。
我这里只试了两种效果。
下面是我的动画文件,共四个:
第一种效果:item分别从左右两侧滑入效果。
push_left_in.xml
&?xml version="1.0" encoding="utf-8"?&
&set xmlns:android="/apk/res/android"&
&translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="300"/&
&alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" /&
push_right_in.xml
&?xml version="1.0" encoding="utf-8"?&
&set xmlns:android="/apk/res/android"&
&translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/&
&alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" /&
第2种效果:第一个item从下往上滑入,其他Item从上往下滑入效果,这个效果如果单个Item比较高(height)的话效果非常酷(卡牛的老版本好像用的就是这种效果)。
slide_bottom_to_top.xml
&?xml version="1.0" encoding="utf-8"?&
&set xmlns:android="/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"&
&translate android:fromYDelta="100%" android:toXDelta="0" android:duration="300" /&
&alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" /&
slide_top_to_bottom.xml
&?xml version="1.0" encoding="utf-8"?&
&set xmlns:android="/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"&
&translate android:fromYDelta="-100%" android:toXDelta="0" android:duration="300" /&
&alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" /&
另外一篇:
这个不是我写的。
GridView的item从上下左右飞入
import java.util.R
import android.app.A
import android.content.C
import android.os.B
import android.view.LayoutI
import android.view.V
import android.view.View.OnClickL
import android.view.ViewG
import android.view.animation.A
import android.view.animation.TranslateA
import android.widget.BaseA
import android.widget.B
import android.widget.GridV
import android.widget.ImageV
public class ZdemoActivity extends Activity {
private GridV
private TranslateAnimation taLeft, taRight, taTop, taB
private int[] imgList = new int[15];
private MyAdapter mA
private LayoutInflater mI
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.InitView();
this.InitAnima();
this.InitData();
private void InitAnima() {
// TODO Auto-generated method stub
taLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
taRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
taTop = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
taBlow = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
taLeft.setDuration(1000);
taRight.setDuration(1000);
taTop.setDuration(1000);
taBlow.setDuration(1000);
private void InitData() {
// TODO Auto-generated method stub
for (int i = 0; i & 15; i++) {
imgList[i] = R.drawable.ic_
mAdapter = new MyAdapter();
gv.setAdapter(mAdapter);
private void InitView() {
// TODO Auto-generated method stub
gv = (GridView) findViewById(R.id.gridView1);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
mAdapter =
mAdapter = new MyAdapter();
gv.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
mInflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
private class MyAdapter extends BaseAdapter {
public int getCount() {
// TODO Auto-generated method stub
return imgList.
public Object getItem(int position) {
// TODO Auto-generated method stub
return imgList[position];
public long getItemId(int position) {
// TODO Auto-generated method stub
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder =
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.image = (ImageView) convertView
.findViewById(R.id.imageView1);
convertView.setTag(holder);
holder = (ViewHolder) convertView.getTag();
int imgID = imgList[position];
holder.image.setImageResource(imgID);
Random ran = new Random();
int rand = ran.nextInt(4);
switch (rand) {
convertView.startAnimation(taLeft);
convertView.startAnimation(taRight);
convertView.startAnimation(taTop);
convertView.startAnimation(taBlow);
return convertV
class ViewHolder {
public ImageV
Android LayoutAnimation使用及扩展
浏览 20510
gundumw100
浏览: 3128766 次
来自: 上海
我想问下,我设置view的layout_gravity属性
下面这行代码。 如果lazyScrollview里含有 水平滑 ...
不错的东东!!!!
yyclang 写道 汗,你把EmptyLayout放到跟Sw ...}

我要回帖

更多关于 listview的动画效果 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信