Drawable

作者: 十旋转45度 | 来源:发表于2018-01-04 17:00 被阅读0次

    1.BitmapDrawable

    ①XML定义BitmapDrawable:

    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"  
        android:dither="true"  
        android:src="@drawable/ic_launcher"  
        android:tileMode="mirror" />
    

    ②实现相同效果的Java代码:

    BitmapDrawable bitDrawable = new BitmapDrawable(bitmap);  
    bitDrawable.setDither(true);  
    bitDrawable.setTileModeXY(TileMode.MIRROR,TileMode.MIRROR);  
    
    image

    2.InsetDrawable

    ①XML中使用:

    <inset xmlns:android="http://schemas.android.com/apk/res/android"  
        android:drawable="@drawable/test1"  
        android:insetBottom="10dp"  
        android:insetLeft="10dp"  
        android:insetRight="10dp"  
        android:insetTop="10dp" /> 
    

    ②在Java代码中使用:

    InsetDrawable insetDrawable = new InsetDrawable(getResources()  
            .getDrawable(R.drawable.test1), 10, 10, 10, 10); 
    
    image

    3.ClipDrawable

    ①定义一个ClipDrawable的资源xml:

    <clip xmlns:android="http://schemas.android.com/apk/res/android"
        android:clipOrientation="horizontal"
        android:drawable="@mipmap/ic_bg_meizi"
        android:gravity="left" /> 
    

    ②在activity_main主布局文件中设置一个ImageView,将src设置为clipDrawable! 记住是src哦,如果你写成了blackground的话可是会报空指针的哦!!!!

    <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">
    
        <ImageView
            android:id="@+id/img_show"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/clip_bg" />
    
    </LinearLayout>  
    

    ③MainActivity.java通过setLevel设置截取区域大小:

    public class MainActivity extends AppCompatActivity {
    
        private ImageView img_show;
        private ClipDrawable cd;
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0x123) {
                    cd.setLevel(cd.getLevel() + 500);
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            img_show = (ImageView) findViewById(R.id.img_show);
            // 核心实现代码
            cd = (ClipDrawable) img_show.getDrawable();
            final Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(0x123);
                    if (cd.getLevel() >= 10000) {
                        timer.cancel();
                    }
                }
            }, 0, 300);
        }
    }
    
    
    image

    4.RotateDrawable

    image
    ①定义一个rotateDrawable资源文件:
    <?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@mipmap/ic_launcher"
        android:fromDegrees="-180"
        android:pivotX="50%"
        android:pivotY="50%" />  
    

    activity_main.xml中修改下src指向上述drawable即可,MainActivity只需要把ClipDrawable 改成rotateDrawable即可!

    public class MainActivity extends AppCompatActivity {
    
        private ImageView img_show;
        private RotateDrawable cd;
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0x123) {
                    if (cd.getLevel() >= 10000)
                        Toast.makeText(MainActivity.this, "转完了~",
                                Toast.LENGTH_LONG).show();
                    cd.setLevel(cd.getLevel() + 400);
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            img_show = (ImageView) findViewById(R.id.img_show);
            // 核心实现代码
            cd = (RotateDrawable) img_show.getDrawable();
            final Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(0x123);
                    if (cd.getLevel() >= 10000) {
                        timer.cancel();
                    }
                }
            }, 0, 100);
        }
    }
    
    image

    5.AnimationDrawable

    代码实现:

    ①先定义一个AnimationDrawable的xml资源文件:
    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
    
        <item
            android:drawable="@mipmap/ic_pull_to_refresh_loading01"
            android:duration="100" />
    
        <item
            android:drawable="@mipmap/ic_pull_to_refresh_loading02"
            android:duration="100" />
        <item
            android:drawable="@mipmap/ic_pull_to_refresh_loading03"
            android:duration="100" />
        <item
            android:drawable="@mipmap/ic_pull_to_refresh_loading04"
            android:duration="100" />
        <item
            android:drawable="@mipmap/ic_pull_to_refresh_loading05"
            android:duration="100" />
        <item
            android:drawable="@mipmap/ic_pull_to_refresh_loading06"
            android:duration="100" />
    
    </animation-list> 
    

    ②activity_main.xml设置下src,然后MainActivity中:

    public class MainActivity extends AppCompatActivity {
    
        private ImageView img_show;
        private AnimationDrawable ad;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            img_show = (ImageView) findViewById(R.id.img_show);
            // 核心实现代码
            ad = (AnimationDrawable) img_show.getDrawable();
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    ad.start();
                }
            }, 300);
        }
    }
    
    image

    1.LayerDrawable

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <bitmap
                android:gravity="center"
                android:src="@mipmap/ic_bg_ciwei" />
        </item>
        <item
            android:left="25dp"
            android:top="25dp">
            <bitmap
                android:gravity="center"
                android:src="@mipmap/ic_bg_ciwei" />
        </item>
        <item
            android:left="50dp"
            android:top="50dp">
            <bitmap
                android:gravity="center"
                android:src="@mipmap/ic_bg_ciwei" />
        </item>
    </layer-list> 
    

    然后在activity_main.xml里加个ImageView,内容如下:

    <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/layerlist_two"/>
    
    image

    TransitionDrawable

    实现代码:

    在res/drawable创建一个TransitionDrawable的xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <transition xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:drawable="@mipmap/ic_bg_meizi1"/>
        <item android:drawable="@mipmap/ic_bg_meizi2"/>
    </transition>
    

    然后布局文件里加个ImageView,然后把src设置成上面的这个drawable 然后MainActivity.java内容如下:

    public class MainActivity extends AppCompatActivity {
        private ImageView img_show;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            img_show = (ImageView) findViewById(R.id.img_show);
            TransitionDrawable td = (TransitionDrawable) img_show.getDrawable();
            td.startTransition(3000);
            //你可以可以反过来播放,使用reverseTransition即可~
            //td.reverseTransition(3000);
        }
    }
    
    image

    LevelListDrawable

    代码实现:
    通过shapeDrawable画圆,一式五份,改下宽高即可:
    shape_cir1.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval">
        <solid android:color="#2C96ED"/>
        <size android:height="20dp" android:width="20dp"/>
    </shape>
    

    接着到LevelListDrawable,这里我们设置五层:

    level_cir.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <level-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:drawable="@drawable/shape_cir1" android:maxLevel="2000"/>
        <item android:drawable="@drawable/shape_cir2" android:maxLevel="4000"/>
        <item android:drawable="@drawable/shape_cir3" android:maxLevel="6000"/>
        <item android:drawable="@drawable/shape_cir4" android:maxLevel="8000"/>
        <item android:drawable="@drawable/shape_cir5" android:maxLevel="10000"/>
    </level-list> 
    

    最后MainActivity写如下代码:

    public class MainActivity extends AppCompatActivity {
    
        private ImageView img_show;
    
        private LevelListDrawable ld;
        private Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                if (msg.what == 0x123) {
                    if (ld.getLevel() > 10000) ld.setLevel(0);
                    img_show.setImageLevel(ld.getLevel() + 2000);
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            img_show = (ImageView) findViewById(R.id.img_show);
            ld = (LevelListDrawable) img_show.getDrawable();
            img_show.setImageLevel(0);
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(0x123);
                }
            }, 0, 100);
        }
    }
    
    image

    相关文章

      网友评论

          本文标题:Drawable

          本文链接:https://www.haomeiwen.com/subject/wvnrnxtx.html