android學習筆記之使用ClipDrawable

來源:互聯網
上載者:User

   ClipDrawable代表從其它位元影像上截取一個“圖片片段”。在XML檔案中使用<clip.../>元素定義ClipDrawable對象,可指定如下三個屬性:

android:drawable:指定截取的源Drawable對象
android:clipOrientation:指定截取的方向,可設定為水平截取或垂直截取
android:gravity:指定截取時的對齊
       使用ClipDrawable對象時可以調用setLevel(int level)方法來設定截取的地區大小,當level為0時,截取的圖片片段為空白;當level為10000時,截取整張圖片。

       通過以上說明,我們發現,可以使用ClipDrawable的這種性質控制截取圖片的地區大小,讓程式不斷調用setLevel方法並改變level的值,達到讓圖片慢慢展開的效果。

 

首先,我們定義一個ClipDrawable對象:

[html]
<?xml version="1.0" encoding="UTF-8"?> 
<clip 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/muller" 
    android:clipOrientation="horizontal" 
    android:gravity="center" > 
     
</clip> 

<?xml version="1.0" encoding="UTF-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/muller"
    android:clipOrientation="horizontal"
    android:gravity="center" >
   
</clip>

接下來,簡單設定下布局檔案,使得圖片能夠顯示在螢幕上(注意ImageView的src屬性的選擇):

[html]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".MainActivity" > 
 
    <ImageView 
        android:id="@+id/view" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:src="@drawable/clip" /> 
 
</LinearLayout> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/clip" />

</LinearLayout>

下面在主程式中設定一個定時器來改變level值:

[java]
public class MainActivity extends Activity 

    private ImageView view=null; 
     
    @Override 
    protected void onCreate(Bundle savedInstanceState)  
    { 
        super.onCreate(savedInstanceState); 
        super.setContentView(R.layout.activity_main); 
        this.view=(ImageView)super.findViewById(R.id.view); 
        //擷取圖片所顯示的ClipDrawable對象  
        final ClipDrawable drawable=(ClipDrawable) view.getDrawable(); 
        final Handler handler=new Handler() 
        { 
            @Override 
            public void handleMessage(Message msg)  
            { 
                //如果訊息是本程式發送的  
                if(msg.what==0x123) 
                { 
                    //修改ClipDrawable的level值  
                    drawable.setLevel(drawable.getLevel()+200); 
                } 
            }        
        }; 
        final Timer timer=new Timer(); 
        timer.schedule(new TimerTask() 
        { 
            @Override 
            public void run()  
            { 
                Message msg=new Message(); 
                msg.what=0x123; 
                //發送訊息,通知應用修改ClipDrawable的level的值  
                handler.sendMessage(msg); 
                //取消定時器  
                if(drawable.getLevel()>=10000) 
                { 
                    timer.cancel(); 
                } 
            } 
        }, 0,300); 
    } 
 

public class MainActivity extends Activity
{
    private ImageView view=null;
 
 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  super.setContentView(R.layout.activity_main);
  this.view=(ImageView)super.findViewById(R.id.view);
  //擷取圖片所顯示的ClipDrawable對象
  final ClipDrawable drawable=(ClipDrawable) view.getDrawable();
  final Handler handler=new Handler()
  {
   @Override
   public void handleMessage(Message msg)
   {
    //如果訊息是本程式發送的
    if(msg.what==0x123)
    {
     //修改ClipDrawable的level值
     drawable.setLevel(drawable.getLevel()+200);
    }
   }  
  };
  final Timer timer=new Timer();
  timer.schedule(new TimerTask()
  {
   @Override
   public void run()
   {
    Message msg=new Message();
    msg.what=0x123;
    //發送訊息,通知應用修改ClipDrawable的level的值
    handler.sendMessage(msg);
    //取消定時器
    if(drawable.getLevel()>=10000)
    {
     timer.cancel();
    }
   }
  }, 0,300);
 }

}


程式運行效果:

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.