android中的一个属性动画,可以显示更多的一个案例
来源:互联网 发布:旅游拼车 知乎 编辑:程序博客网 时间:2024/06/04 23:20
下面是代码:
MainActivity
public class MainActivity extends AppCompatActivity { ListView lv; //自定义属性 List<String> 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(); } /** * <TextView * android:id="@+id/tv_content" * android:layout_width="match_parent" * android:layout_height="wrap_content" * android:gravity="center" * android:maxLines="5" * android:text="? */ 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>
0 0
- android中的一个属性动画,可以显示更多的一个案例
- [Android]自定义一个可以展开显示更多的文本布局
- Android 自定义一个可以展开显示更多的文本布局
- Android 自定义一个可以展开显示更多的文本布局
- 可以使一个页面显示更多的内容
- 利用属性动画制作下拉显示更多的效果
- 分页显示的一个案例
- Android 属性动画监听事件与一个菜单的例子
- 48.Android属性动画的一个小练习
- 从一个新的角度开始学习Android属性动画
- 一个错误使用Android 属性动画的例子
- 你可以赚取更多的薪水作为一个Java开发
- 一个用粒子动画显示文字的 Android 自定义 View
- 可以重复使用的一个简单动画函数
- 一个简单的VC++案例:显示年月日
- android 动画总结(利用属性动画做一个波浪)
- Android中属性动画3----ObjectAnimator实现一个动画菜单
- console.dir()可以显示一个对象所有的属性和方法
- SpringMVC 基础知识
- Spring scope 分类
- pthread线程同步机制
- win10+64bit+anaconda+theano 深度学习基本配置学习笔记
- php 之 创建永久二维码
- android中的一个属性动画,可以显示更多的一个案例
- js把数字转换为金额格式,如1000000换为1,000,000.00,以及反向改回
- 第二行代码读书笔记--Material Design实践之ToolBar
- shell脚本中${}的用法
- UVA10340
- 极验geetest破解
- 关于VGA的显示原理和Verilog语言实现/学习笔记
- OpenStack介绍
- MyBatis Generator(MBG)的使用