• 使用(Drawable)资源———ClipDrawable资源


        ClipDrawable代表从其他位图上截取的一个"图片片段"。在XML文件中定义ClipDrawable对象使用<clip.../>元素,该元素的语法为:

    <?xml version="1.0" encoding="utf-8"?>
    <clip
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@drawable/drawable_resource"
        android:clipOrientation=["horizontal" | "vertical"]
        android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                         "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                         "center" | "fill" | "clip_vertical" | "clip_horizontal"] />

    上面的语法格式中可指定如下三个属性:

    • android:drawable:指定截取的源Drawable对象。
    • android:clipOrientation:指定截取方向,可设置水平截取或垂直截取。
    • android:gravity:指定截取时的对齐方式。 

         使用ClipDrawable对象时可调用setLevel(int level)方法来设置截取的区域大小,当level为0时,截取的图片片段为空;当level为10000时,截取整张图片。

         下面以一个示例来说明ClipDrawable对象的用法。

         实例:徐徐展开的风景

         因为ClipDrawable对象可调用setLevel(int level)控制截取图片的部分,因此本示例只要设置一个定时器,让程序不断调用ClipDrawable的setLevel(int level)方法即可实现图片徐徐展开的效果。

         程序先定义如下ClipDrawable对象。

         程序清单my_clip.xml

        

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

    上面的程序控制从中间开始截取图片,截取方向为水平截取。接下来程序将通过一个定时器来定期修改ClipDrawable对象的level,即可实现图片徐徐展开的效果。

    package com.example.studyresources;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.graphics.drawable.ClipDrawable;
    import android.view.Menu;
    import android.widget.ImageView;
    
    public class ClipDrawableTest extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_clip_drawable_test);
            ImageView imageView=(ImageView)findViewById(R.id.image);
            //获取图片所显示的ClipDrawable对象
            final ClipDrawable drawable=(ClipDrawable)imageView.getDrawable();
            final Handler handler=new Handler()
            {
    
                @Override
                public void handleMessage(Message msg) {
                    // TODO Auto-generated method stub
                    //如果该程序是本程序所发送的
                    if(msg.what==0x123)
                    {
                        //修改ClipDrawable的level值
                        drawable.setLevel(drawable.getLevel()+200);
                    }
                }
            };
            final Timer timer=new Timer();
            timer.schedule(new TimerTask(){
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    Message msg=new Message();
                    msg.what=0x123;
                    //发送消息,通知应用修改ClipDrawable对象的Level值
                    handler.sendMessage(msg);
                    //取消定时器
                    
                    if(drawable.getLevel()>=10000)
                    {
                        timer.cancel();
                    }
                }
            }, 0,300);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.clip_drawable_test, menu);
            return true;
        }
    
    }

    运行上面的程序,将看到如图6.6所示的结果。

     

    从图6.6所示的运行结果可以看出,通过使用这种徐徐展开的图片,用户会感觉就像进度条一样——实际上,实际应用中完全可以用这种ClipDrawable对象来实现图片进度条。

  • 相关阅读:
    如何用正确的方法写出高质量软件的75条体会(转)
    使用javascript动态添加onclick事件,
    签名和重载
    C#文件后缀名详解
    配置SQL Server 2005 Express的身份验证方式,以及如何启用sa登录名。
    CSS选择符及优先级计算
    关于软件版本的解释
    数据结构形象解释
    CSS属性选择符
    [转载]Repeater三层嵌套
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3438944.html
Copyright © 2020-2023  润新知