zoukankan      html  css  js  c++  java
  • 使用(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对象来实现图片进度条。

  • 相关阅读:
    496 服务器渲染 VS 客户端渲染
    495 队列,优先级队列
    493 JS中数据类型检测的四种方案
    492 js的继承:原型继承,CALL继承,寄生组合式继承,ES6中的类和继承
    491 CALL和APPLY以及BIND语法(含BIND的核心原理),CALL和APPLY的应用(类数组借用数组原型方法),CALL源码解析及阿里面试题
    490 JavaScript的this的五种指向
    488 DOM0和DOM2事件绑定的原理、使用、区别
    487 函数的三种角色:普通函数,构造函数(类),普通对象,原型链清明上河图
    486 原型及原型链模式:3个重要知识点,从面向对象角度来讲解内置类,hasOwnProperty,原型链方法中的THIS问题,基于内置类的原型扩展方法
    485 面向对象:单例设计模式,工厂模式,什么是面向对象,构造函数,instanceof,构造函数中的局部变量以及new构造函数时不加括号
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3438944.html
Copyright © 2011-2022 走看看