android中的一个属性动画,可以显示更多的一个案例_第1张图片

下面是代码:

MainActivity

public class MainActivity extends AppCompatActivity {    ListView lv;    //自定义属性    List mList = new ArrayList<>();    ShowTextView showTextView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        for (int i = 0; i < 10; i++) {            mList.add("菜单" + i);        }        setContentView(R.layout.activity_main);        lv = (ListView) findViewById(R.id.lv);        lv.setAdapter(adapter);        showTextView = (ShowTextView) findViewById(R.id.showTextView);        showTextView.setText("加载动画\n" +                "AnimationUtils\n" +                "\n" +                "所有动画都有的属性\n" +                "fillAfter  动画播放完毕后 停留在最后的动画的状态,不能同时播放帧动画后停止状态\n" +                "android:repeatCount=\"infinite\"  次数,可选数值\n" +                "android:repeatMode=\"reverse\" 反转    模式 默认重复,\n" +                "android:interpolator=\"@android:anim/bounce_interpolator\" 弹球效果,不能在set里面\n" +                "\n" +                "java代码创建\n" +                " Animation anim = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);\n" +                " \n" +                "如果没有写TO_SELF,那么针对父窗体\n" +                "\n" +                "增对activity的进出场动画\n" +                "overridePendingTransition\n" +                "必须放在finish或者startactivity还有forResult之后的一句,");    }    private BaseAdapter adapter = new BaseAdapter() {        @Override        public int getCount() {            return mList.size();        }        @Override        public Object getItem(int position) {            return null;        }        @Override        public long getItemId(int position) {            return 0;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            //每条都给动画            if (convertView == null)                convertView = View.inflate(MainActivity.this, android.R.layout.simple_list_item_1, null);            TextView tv = (TextView) convertView;            tv.setText(mList.get(position));            //动画            tv.startAnimation(getTranAnim(position));            return convertView;        }        public Animation getTranAnim(int position) {            Animation anim = new TranslateAnimation(getResources().getDisplayMetrics().widthPixels, 0, 0, 0);            anim.setDuration(300);            anim.setStartOffset(100 * position);            return anim;        }    };}

ShowTextView ,显示动画效果的类

public class ShowTextView extends LinearLayout implements View.OnClickListener {    TextView tvContent, tvMore;    boolean isShow;    public ShowTextView(Context context) {        super(context);        init();    }    //设置文本    public void setText(String text) {        tvContent.setText(text);        initText();    }    /**     * private void init() {        //有两个组件        setOrientation(VERTICAL);        //marge标签        View.inflate(getContext(), R.layout.textview_layout, this);        //this.addView(layout);        tvContent = (TextView) findViewById(R.id.tv_content);        tvContent.setPadding(10, 10, 10, 10);        tvMore = (TextView) findViewById(R.id.tv_more);        //开始设置        initText();    }    private void initText() {        //延迟的去操作view        tvContent.post(new Runnable() {            @Override            public void run() {                //判断是否单行                Log.e("TAG", "------------" + tvContent.getLineCount());                if (tvContent.getLineCount() != 1) {                    tvContent.setGravity(Gravity.LEFT);                } else {                    tvContent.setGravity(Gravity.CENTER);                }                //判断是否超过5行                if (tvContent.getLineCount() > 5) {                    tvMore.setVisibility(View.VISIBLE);                    tvMore.setOnClickListener(ShowTextView.this);                } else {                    tvMore.setVisibility(View.GONE);                }            }        });    }    public ShowTextView(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    @SuppressLint("NewApi")    @Override    public void onClick(View v) {        //当用户点击的时候        isShow = !isShow;        if (isShow) {            //需要显示更多            tvMore.setText("收起");            //属性动画            //。。。代表可变长度数值            Log.e("TAG", tvContent.getMaxLines() + "   " + tvContent.getLineCount());            ObjectAnimator.ofInt(tvContent, "lines", 5, tvContent.getLineCount()).setDuration(500).start();        } else {            //收起            tvMore.setText("显示更多");            ObjectAnimator.ofInt(tvContent, "lines", tvContent.getLineCount(), 5).setDuration(500).start();        }    }}

show_layout.xml用的是merge标签

<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="wrap_content">    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:maxLines="5"        android:id="@+id/tv_content"        android:gravity="center"        android:text="显示内容"/>    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="10dp"        android:id="@+id/tv_more"        android:visibility="invisible"        android:text="显示更多"/>merge>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:orientation="vertical"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.listanim_10_28.MainActivity"><com.example.listanim_10_28.ShowTextView    android:layout_width="match_parent"    android:id="@+id/tv_show"    android:layout_height="wrap_content"    />    <ListView        android:id="@+id/lv"        android:layout_width="wrap_content"        android:visibility="invisible"        android:layout_height="wrap_content" />LinearLayout>

更多相关文章

  1. RelativeLayoutd 的属性
  2. android 多张图片动画方式轮播(转载)
  3. Android 属性动画中心点无限循环
  4. Android 二级动画弹出菜单
  5. android页面切换动画
  6. 『ANDROID』反射取子类、父类 属性
  7. API 25 (Android 7.1.1 API) widget.ImageView——属性分析
  8. Android在View中的动画
  9. android 彩带动画,粒子动画

随机推荐

  1. Swing中引入Android的NinePatch技术,让Swi
  2. 那些年Android黑科技①:只要活着,就有希望
  3. Android(安卓)IPC
  4. 创业&Android
  5. Android开发者e周报 第6期
  6. android车载娱乐系统跟android平板的分析
  7. Android中自定义控件
  8. Missing styles. Is the correct theme c
  9. Android的Window类详解
  10. IBM谷歌等工程师撰写Android开发教程合集