首页 > 其他分享 >android学习之TransitionDrawable …

android学习之TransitionDrawable …

时间:2023-07-31 22:01:24浏览次数:38  
标签:xml mLinearLayout TransitionDrawable void 学习 drawer android Drawable png


Drawable的例子,体现出Drawable的强大功能。Android SDK中说明了Drawable主要的作用是:在XML中定义各种动画,然后把 XML当作Drawable资源来读取,通过Drawable显示动画。

下面举个使用TransitionDrawable 的例子,创建一个Android工程,然后再这个工程的基础上修改,修改过程如下:
1、去掉layout/main.xml中的TextView,增加ImagView,如下:

<ImageView
 android:layout_width=”wrap_content”
 android:layout_height=”wrap_content”
 android:tint=”#55ff0000″
 android:src=”@drawable/my_image”/>2、创建一个XML文件,命名为expand_collapse.xml,内容如下:
 <?xml version=”1.0″ encoding=”UTF-8″?>
 <transition xmlns:android=”http://schemas.android.com/apk/res/android”>
 <item android:drawable=”@drawable/image_expand”/>
 <item android:drawable=”@drawable/image_collapse”/>
 </transition>
 需要3张png图片,存放到res\drawable目录下,3张图片分别命名为:my_image.png、image_expand.png、image_collapse.png。3、修改Activity中的代码,内容如下:
 LinearLayout mLinearLayout;
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 mLinearLayout = new LinearLayout(this);
 ImageView i = new ImageView(this);
 i.setAdjustViewBounds(true);
 i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
 mLinearLayout.addView(i);
 setContentView(mLinearLayout);
 Resources res = getResources();
 TransitionDrawable transition =
 (TransitionDrawable) res.getDrawable(R.drawable.expand_collapse);
 i.setImageDrawable(transition);
 ansition.startTransition(10000);}

4、如果修改的没有错误,运行程序,结果显示如下:
初始图片


屏幕上动画显示的是:从图片image_expand.png过渡到image_collapse.png,也就是我们在expand_collapse.xml中定义的一个transition动画。看完这个例子,你对Drawable的理解是否又深入些?这里提供这个程序的源代码,供大家下载,可以在这个例子的基础上去体会其他的Drawable,来加深对Drawable的理解。

总结说明

通过以上2个例子程序,相信对Drawable会有一定的认识了,在以后的篇幅中会介绍更多的例子,更加深入的学习和理解Drawable。具体还有哪些Drawable,大家到Android SDK去深入学习吧。



实现上图效果:

xml部份文件:
<SlidingDrawer  
      android:id="@+id/slidingdrawer" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal" 
      android:handle="@+id/handle" 
      android:content="@+id/content">  
      <ImageView  
               android:id="@+id/handle" 
               android:layout_width="56dip"
               android:layout_height="fill_parent"
              android:background="@drawable/handle"                 
               android:focusable="true"
               android:clickable="true"
                 
               android:scaleType="center"    
              android:src="@drawable/handle_icon"         />  
      <LinearLayout  
          android:id="@+id/content" 
          android:layout_width="fill_parent" 
          android:layout_height="fill_parent" 
          android:background="#778899">  
          <Button  
              android:id="@+id/button" 
              android:layout_width="wrap_content" 
              android:layout_height="wrap_content" 
              android:text="Button" 
          />  
          <EditText  
              android:id="@+id/editText" 
              android:layout_width="fill_parent" 
              android:layout_height="wrap_content" 
          />  
      </LinearLayout>  
  </SlidingDrawer>   
hand_icon.xml
<?xml version="1.0" encoding="utf-8"?>
 <transition xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:drawable="@drawable/ic_tray_expand"  />
     <item android:drawable="@drawable/ic_tray_collapse"  />
 </transition>
hand.xml
<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/tray_handle_normal" />
     <item android:state_pressed="true" android:drawable="@drawable/tray_handle_pressed" />
     <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/tray_handle_selected" />
     <item android:state_enabled="true" android:drawable="@drawable/tray_handle_normal" />
     <item android:state_focused="true" android:drawable="@drawable/tray_handle_selected" />
 </selector> 代码部份:
 mDrawer = (SlidingDrawer) findViewById(R.id.slidingdrawer);
   final SlidingDrawer drawer = mDrawer; mLinearLayout = (LinearLayout) drawer.getContent();
   final LinearLayout grid = mLinearLayout;
 mImageView = (ImageView) drawer.findViewById(R.id.handle);
 mHandleIcon = (TransitionDrawable) mImageView.getDrawable();
   mHandleIcon.setCrossFadeEnabled(true);
 final DrawerManager drawerManager = new DrawerManager();
   drawer.setOnDrawerOpenListener(drawerManager);
   drawer.setOnDrawerCloseListener(drawerManager);
   drawer.setOnDrawerScrollListener(drawerManager);
private class DrawerManager implements SlidingDrawer.OnDrawerOpenListener,
    SlidingDrawer.OnDrawerCloseListener,
    SlidingDrawer.OnDrawerScrollListener {
   private boolean mOpen; public void onDrawerOpened() {
    Log.v(tag, "onDrawerOpened");
    if (!mOpen) {
    mHandleIcon.reverseTransition(150);    mOpen = true;
    }
   } private void offsetBoundsToDragLayer(Rect bounds, View view) {
    view.getDrawingRect(bounds);
    Log.v(tag, "offsetBoundsToDragLayer");
   } public void onDrawerClosed() {
    Log.v(tag, "onDrawerClosed");
    if (mOpen) {
     mHandleIcon.reverseTransition(150);    mOpen = false;
    } }
 public void onScrollStarted() {
    if (PROFILE_DRAWER) {
     android.os.Debug.startMethodTracing("/sdcard/launcher-drawer");
    }
   } public void onScrollEnded() {
    if (PROFILE_DRAWER) {
     android.os.Debug.stopMethodTracing();
    }
   }
  }

标签:xml,mLinearLayout,TransitionDrawable,void,学习,drawer,android,Drawable,png
From: https://blog.51cto.com/u_3124497/6913812

相关文章

  • android 弹出对话框之 AlertDialog
    1.在测试时,如何实现一个提示可以使用Toast.makeText(this,"这是一个提示",Toast.LENGTH_SHORT).show();//从资源文件string.xml里面取提示信息Toast.makeText(this,getString(R.string.welcome),Toast.LENGTH_SHORT).show();这个提示会几秒钟后消失2.可以使用AlertD......
  • android 单元测试之 JUnit
    android里面做单元测试第一,JUnit。     实用范围:     东西,比如业务逻辑,数据封装,数值计算等等。并不能测试androidapi。第二,采用Instrumentation.Android单元测试的主入口是InstrumentationTestRunner。它相当于JUnit当中TestRunner的作用。你可以将Instrumentat......
  • 【学习笔记-CS144 计算机网络】传输层
    概述主要任务:对接端口连接管理分割和重组上下数据差错和纠错功能流量控制传输层协议TCP特点:可靠性高端到端,面向连接基于字节速度慢向下传递操作步骤:接受来自应用层的8位字节的数据流,并根据MTU分段。封装上队头标记,打包成数据包将......
  • 【腾讯云Cloud Studio实战训练营】Cloud Studio 快速搭建学习分享
    零、前言最近接触到了一款开发神器,云端IDE,相比于传统的IDE,云端IDE可以更大程度的提升用户工作的效率。带大家一起了解CloudStudio的神奇之处。一、CloudStudio1.1、CloudStudio是什么云IDECloudStudio作为腾讯云出品的一款在线云端开发工具,它可以帮助用户减少安装IDE......
  • Android开发有必要深耕Framework吗?
    引言关于Android市场,我们也不必探究。市场下滑是众所周知的,凉是不可能凉的,毕竟智能网络时代安卓占据人们生活很大一块。而我们在开发岗位,大家都会多少接触一些framework底层技术。那么framework技术到底有多重要呢?其实掌握AndroidFramework一直是一个不光要熟练而且必须要精通的......
  • Mybatis学习(1)——mybatis介绍 & 入门案例 & 全局配置文件详解 & 增删改查 + mybatis事
    Mybatis学习(1)——mybatis介绍&入门案例&全局配置文件详解&增删改查+mybatis事务&mapper.xml文件#{}和${}&动态SQL入门原文链接:https://blog.csdn.net/Pireley/article/details/131520252目录引出一、mybatis是啥1.官网&ORM(ObjectRelationMapping)对象关......
  • 关于Python的学习记录(二十_文件的基本操作)
    实际开发中常常会遇到对数据进行持久化的场景,所谓持久化是指将数据从无法长久保存数据的存储介质(通常是内存)转移到可以长久保存数据的存储介质(通常是硬盘)中。实现数据持久化最直接简单的方式就是通过文件系统将数据保存到文件中。计算机的文件系统是一种存储和组织计算机数据的方法......
  • 学习Java的第10天
    变量变量是什么:就是可以变化的量!Java是一种强类型语言,每一个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。typevarName[=value][{,varName[=value]}];//数据类型变量名=值;;可以使用逗号隔开来声明多个同类型变量注......
  • 梯度消失:深度学习的挑战
    介绍深度学习使计算机能够从大量数据中学习并做出复杂的决策,从而彻底改变了人工智能领域。这一成功在很大程度上归功于深度神经网络的发展,它能够从数据中学习分层表示。然而,这些网络面临着一个被称为“梯度消失”的重大挑战,这可能会阻碍它们的训练和表现。在本文中,我们将探讨梯度......
  • HashMap深入学习
    1.HashMap和HashTable的区别?a.HashMap是线程不安全的,HashTable是线程安全的。b.HashTable不允许有null键和null值。c.HashMap底层是数组+链表+红黑树,而HashTable底层是数组+链表。d.HashMap默认的初始大小为16,每次扩容变为原来的2倍;HashTable默认初始大小为11,每次扩容后容量变为原......