精华内容
下载资源
问答
  • 需求:上次用TextView写了一个从标题下面弹出的提示框.android标题下面弹出提示框(一) TextView实现,带动画效果, 总在找事情做的产品经理又提出了奇葩的需求。之前在通知显示的提示需要在标题上面弹出提示框,...

    需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果,  总在找事情做的产品经理又提出了奇葩的需求。之前在通知栏显示的提示需要在标题栏上面弹出提示框,然后用动画去显示隐藏,并且在大部分Activity上都要显示。

    问题1:用上次那个TextView隐藏在布局文件中肯定不行了,不然每个activity都要修改,于是决定用PopupWindow,只要显示在activity的根布局上就行.
    问题2:需要把显示PopupWindow的方法抽出来作为一个公共方法,我这边是放到一个工具类里面,传入当前activity.
    问题3:从顶部移动多少距离呢?因为我们这个提示框跟标题栏的高度不一样的,于是我就计算提示框图片的高度,作为移动的高度.

    效果图如下:



    PopupWindowTest.java  程序的入口,调用显示popupwindow的工具类

    /**
     * 显示PopupWindow的activity
     * @author ansen
     * @create time 2015-10-27
     */
    public class PopupWindowTest extends Activity{
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_popupwindow_test);
    		
    		findViewById(R.id.btn_show_tip).setOnClickListener(onClickListener);
    	}
    	
    	private OnClickListener onClickListener=new OnClickListener() {
    		@Override
    		public void onClick(View v) {
    			switch (v.getId()) {
    			case R.id.btn_show_tip://显示提示.
    				Util util=new Util();
    				util.showTips(PopupWindowTest.this);
    				break;
    			}
    		}
    	};
    }

    Util.java   封装了显示popupwindow的方法,并且增加了动画结束回调接口,动画结束隐藏popupwindow。

    /**
     * 封装了显示Popupwindow的方法.
     * @author ansen
     * @create time 2015-10-27
     */
    public class Util implements AnimationEndCallback{
    	private PopupWindow reportVideoPopwindow;
    	
    	public void showTips(Activity activity){
    		int translateHeight=(int) dip2px(activity,52);
    		View parent = ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
    		View popView = LayoutInflater.from(activity).inflate(R.layout.activity_popupwindow_tips, null);
    		int statusBar=getStatusBarHeight(activity);
    		reportVideoPopwindow = new PopupWindow(popView,LayoutParams.MATCH_PARENT,translateHeight*2);
    		reportVideoPopwindow.showAtLocation(parent,Gravity.TOP, 0, 0);
    		TipRelativeLayout tvTips=(TipRelativeLayout) popView.findViewById(R.id.rl_tips);
    		tvTips.setTitleHeight(statusBar);//移动状态栏的高度
    		tvTips.setAnimationEnd(this);//设置动画结束监听函数
    		tvTips.showTips();//显示提示RelativeLayout,移动动画.
    	}
    	
    	public int getStatusBarHeight(Context context) {
    		  int result = 0;
    		  int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    		  if (resourceId > 0) {
    		      result = context.getResources().getDimensionPixelSize(resourceId);
    		  }
    		  return result;
    	}
    	
    	private  float dip2px(Context context, float dpValue) {
    		final float scale = context.getResources().getDisplayMetrics().density;
    		float result = dpValue * scale + 0.5f;
    		return result;
    	}
    	
    	@Override
    	public void onAnimationEnd() {
    		reportVideoPopwindow.dismiss();//动画结束,隐藏popupwindow
    	}
    }


    TipRelativeLayout.java   这个类也没啥好说的,就在原来的TipTextView基础上增加了一个动画结束回调接口。
    /**
     * 自定义RelativeLayout  显示提示信息,显示时有动画效果(从上面弹出,然后改变透明度慢慢隐藏)
     * @author ansen
     * @create time 2015-10-20
     */
    public class TipRelativeLayout extends RelativeLayout{
    	private static final int START_TIME=400;//动画显示时间
    	private static final int END_TIME=400;//动画移出时间
    	private static final int SHOW_TIME=1000;//动画显示时间
    	
    	private AnimationEndCallback animationEnd;
    	private int titleHeight=100;//标题栏默认的高度设置成100
    
    	public TipRelativeLayout(Context context) {
    		super(context);
    	}
    	
    	public TipRelativeLayout(Context context, AttributeSet paramAttributeSet) {
    		super(context, paramAttributeSet);
    	}
    
    	public TipRelativeLayout(Context context, AttributeSet paramAttributeSet,int paramInt) {
    		super(context, paramAttributeSet, paramInt);
    	}
    	
    	public void showTips(){
    		setVisibility(View.VISIBLE);
    		
    		//向下移动动画
    		TranslateAnimation downTranslateAnimation=new TranslateAnimation(0,0,0,titleHeight);
    		downTranslateAnimation.setDuration(START_TIME);
    		downTranslateAnimation.setFillAfter(true);
    		
    		startAnimation(downTranslateAnimation);
    		
    		//动画监听
    		downTranslateAnimation.setAnimationListener(new AnimationListener() {
    			@Override
    			public void onAnimationStart(Animation animation) {}
    			@Override
    			public void onAnimationEnd(Animation animation){//向下移动动画结束
    				topTranslateAnimation();
    			}
    			@Override
    			public void onAnimationRepeat(Animation animation) {}
    		});
    	}
    	
    	private void topTranslateAnimation(){
    		new Handler().postDelayed(new Runnable() {//延时1秒之后再向上移动
    			@Override
    			public void run(){
    				
    				//向上移动动画
    				TranslateAnimation topTranslateAnimation=new TranslateAnimation(0,0,titleHeight,0);
    				topTranslateAnimation.setDuration(END_TIME);
    				topTranslateAnimation.setFillAfter(true);
    				
    				//改变透明度
    				AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
    				alphaAnimation.setDuration(END_TIME);
    				
    				//两个动画添加到动画集合中
    				AnimationSet animationSet=new AnimationSet(true);
    				animationSet.addAnimation(topTranslateAnimation);
    				animationSet.addAnimation(alphaAnimation);
    				
    				startAnimation(animationSet);//开启动画
    				
    				animationSet.setAnimationListener(new AnimationListener() {
    					@Override
    					public void onAnimationStart(Animation animation) {}
    					@Override
    					public void onAnimationRepeat(Animation animation) {}
    					@Override
    					public void onAnimationEnd(Animation animation){//动画结束隐藏提示的TextView
    						setVisibility(View.GONE);
    						if(animationEnd!=null){
    							animationEnd.onAnimationEnd();
    						}
    					}
    				});
    			}
    		},SHOW_TIME);
    	}
    
    	/**
    	 * 设置标题栏高度
    	 * @param titleHeight
    	 */
    	public void setTitleHeight(int titleHeight) {
    		this.titleHeight = titleHeight;
    	}
    	
    	public void setAnimationEnd(AnimationEndCallback animationEnd) {
    		this.animationEnd = animationEnd;
    	}
    	
    	/**
    	 * 动画结束监听函数
    	 * @author apple
    	 */
    	public interface AnimationEndCallback{
    		public void onAnimationEnd();
    	}
    }

    其他的布局文件什么的我就不贴出来了,有需要的自己可以去下载源码.推荐下自己创建的android QQ群:202928390   欢迎大家的加入.

    点击下载源码

    下载第二版   修正了某些手机状态栏的高度不对出现的bug.


    推荐一个Android开发者公众号,每周都有原创干货


    展开全文
  • 向 echarts图标工具栏toolbox加入自定义图标/图形 echarts

    首先参考一下官方文档:


    接下来自己动手:

    <!--chart1-->
    <script type="text/javascript">
        var myChart = echarts.init(document.getElementById('chart1'));
    
        // 显示标题,图例和空的坐标轴
        myChart.setOption({
            tooltip: {
                show: true,
                trigger: 'axis',
                axisPointer: { // 坐标轴指示器,坐标轴触发有效
                    type: 'line' // 默认为直线,可选为:'line' | 'shadow'
                }
            },
            toolbox: {
                show: true,
                feature: {
                    myTool: {
                        show: true,
                        title: '自定义扩展方法',
                        icon:'image://images/more.png',
                        z:'999',
                        left:'center',
                        onclick: function (){
                            alert('myToolHandler2')
                        }
                    }
                }
            },
            legend: {
                data: ['住户', '租户'],
                right: '10%',
                top: '20px'
            },
            itemStyle: {
                normal: {},
                emphasis: {
                    barBorderWidth: 1,
                    shadowBlur: 10,
                    shadowOffsetX: 0,
                    shadowOffsetY: 0,
                    shadowColor: 'rgba(0,0,0,0.5)'
                }
            },
            title: {
                text: '居住人群统计',
                x: 'center'
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
    
            xAxis: {
                data:   []
            },
            yAxis:{},
            series: [{
                name: '住户',
                type: 'bar',
                stack: '总量',
                label: {
                    normal: {
                        show: true,
                        position: 'insideRight'
                    }
                },
                data: [320, 302, 301, 334, 390, 330, 320]
            },
                {
                    name: '租户',
                    type: 'bar',
                    stack: '总量',
                    label: {
                        normal: {
                            show: true,
                            position: 'insideRight'
                        }
                    },
                    data: [120, 132, 101, 134, 90, 230, 210]
                }]
        })
    
        // myChart.showLoading();    //数据加载完之前先显示一段简单的loading动画
    
        var xAxisData = [];
        var render = [];
        var residnet = [];
    
        $.ajax({
            type : "post",
            //  async : true,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)        url: "http://10.1.17.11:8090/safecity/examineEquipment",
            url: "http://10.1.17.11:8090/safecity/examineEquipment",
            data : {
                //需要读取
            },
            dataType : "json",        //返回数据形式为json
            success : function(result) {
                //请求成功时执行该函数内容,result即为服务器返回的json对象
    
            }
    
        })
    
    </script>
    注意红色部分,容易出错的是黄色高亮处的代码——

    格式必须是:  icon : ' image://(图片/图标的路径) ' 

    效果图如下:


    右上角的‘点点点’就是我从font-awesome上找来的图标。

    展开全文
  • 利用MATLAB实现图片切换动画效果详解

    万次阅读 多人点赞 2018-03-15 16:59:51
    内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释。介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效。其中涉及一些MATLAB...

    内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释。介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效。其中涉及一些MATLAB的高级图形设计,具体的函数及命令文中会详细介绍。本文先逐步介绍实现思路及代码细节,最后附上完整代码。

    1. 前言

           MATLAB中为数据可视化提供了全面系统的功能函数,据此可以绘制出许多形象生动的精美图像。同时MATLAB的句柄图形为用户提供了强有力的工具,可以很方便地对图形的每个可能方面进行控制,这在需要设计GUI的场合用处很大。刚接触时看到许多用MATLAB制作出炫丽的仿真动画不明觉厉,在大学的MATLAB编程课里也经常有编写一个图片切换动画的作业或课设。这里写一个有几幅图片轮流切换不同效果的程序,为此提供一个参考思路,希望对大家有所启发。

    2. MATLAB动画制作

           本节介绍MATLAB中动画制作的常用方式,对原理比较熟悉的读者可直接跳至第3节。众所周知动画其实是很多张图片的以一定时间间隔的逐帧切换,一个简单直接的想法当然就是下面代码中方式了。首先读取一张图片,通过for循环逐步扩大要显示图片的索引范围,达到逐步放大图片的效果。

    I=imread('image.jpg');%读图
    [x,y,z]=size(I);%尺寸
    while 1
    for i=1:100
       imshow(I(1:x/100*i,1:y/100*i,:));%逐渐放大显示
    end
    end

                                                                                                图2.1 显示效果图

           上述代码有点粗糙,运行过程中随着图片的放大窗口也在不断抖动。这其实跟imshow( )函数有关,每次调用它显示一张图片系统就会自动新创建一个窗口,窗口的大小是根据要显示图片的大小自动缩放的,上面的for循环中不断调用imshow( )而图片的大小是不断变大的,显示窗口自然也跟着变化。

           其实MATLAB为动画制作提供了三种实现方式:质点动画、电影动画、程序动画。质点动画是最简单的动画产生方式,产生一个顺着曲线轨迹运动的质点来操作;电影动画首先会保存一系列的图形数据,然后按照一定的顺序像电影一样的播放;程序动画是在图形窗口中按照一定的算法连续擦除和重绘图形对象。下面逐个简单演示一下

    2.1 质点动画

           质点动画由comet、comet3函数产生质点动画,分别对应二维和三维坐标下的质点。首先求解出质点完整的运动轨迹坐标x,y(三维时还有z),将x,y作为输入参数使用comet或comet3直接绘制动点。

     

    调用格式 调用说明
    comet(y) 显示质点绕着向量y的动画轨迹运动(二维)
    comet(x,y) 显示质点在横轴、纵轴方向的运动随向量x,y的动画轨迹(二维)
    comet(x,y,p)  效果与上一个相同,额外定义轨迹尾巴线的长度p*length(y),p介于0,1之间,默认为0.1

    comet3函数的使用方法与comet相似。

    实例代码如下:

    clf;  
    clear;  
    grid on;
    
    vx = 100*cos(1/4*pi);  
    vy = 100*sin(1/4*pi);  
    t = 0:0.02:15;  
    dx = vx*t;  
    dy = vy*t-9.8*t.^2/2;  
    comet(dx, dy);

    效果如图2.1.1所示

     

     

                                                                                               图2.1.1 质点动画效果图

    2.2 电影动画

           电影动画和电影的制作有点相似,实际可以看出是一个先“拍”再“播”的过程,即捕捉将要构成动画帧的图像逐个存到一个大矩阵中,然后播放这个大矩阵的数据。

    基本步骤:
      1、调用moviein函数初始化内存,创建一个足够大的矩阵,用于存储构成每一帧图像的数据。
      2、利用getframe抓取当前画面(即每帧图像),返回的数据用于构成动画矩阵。
      3、调用movie函数按照指定的速度进行指定次数播放该电影动画。例如:movie(M, n)可以播放由矩阵M所定义的画面n次,默认只播放一次。

    getframe与movie函数调用格式见表2.2.1及表2.2.2:getframe函数可以捕捉动画帧,并保存到矩阵中。

    表2.2.1 getframe函数用法
    调用格式 调用说明
    f=getframe 从当前图形框中得到动画帧
    f = getframe(h) 从图形句柄h中得到动画帧
    f=getframe(h,rect) 从图形句柄h的指定区域rect中得到动画帧

    当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的用法有:

    表2.2.2 movie函数用法
    调用格式 调用说明
    movie(M) 将矩阵M中的动画帧播放一次
    movie(M, n) 将矩阵M中的动画帧播放n次
    movie(M,n,fps) 将矩阵M中的动画帧以每秒fps帧的速度播放n次

    实例:旋转的山峰动画

    clc; clear;  
       
    % peaks是一个函数,其中有2个变量。由平移和放缩高斯分布函数获得。  
    % 参数为30,得到的X、Y、Z为30*30的矩阵。  
    [X, Y, Z] = peaks(30);  
    % surf绘制三维曲面图  
    surf(X,Y,Z);  
       
    axis([-3,3,-3,3,-10,10]);  
    % 关闭所用坐标轴上的标记、格栅和单位标记。但保留由text和gtext设置的对象  
    axis off;  
    shading interp;   
    colormap(hot);  
    
    M = moviein(20);% 建立一个20列的大矩阵    
    for i = 1:20    
       view(-37.5+24*(i-1),30);% 改变视点     
       M(i) = getframe;% 将图形保存到M矩阵   
    end  
    
    movie(M,2);% 播放画面2次

    运行结果如图2.2.1所示

     

     

                                                                                              图2.2.1 电影动画实例

    2.3 程序动画

           在MATLAB中把用于数据可视和界面制作的基本绘图要素称为句柄图形对象,每个图形对象有相应的属性值,例如线条Line对象就有颜色、位置等属性。可以改变图形对象的属性值,重绘图形对象,从而创建程序动画。其基本思路是:首先新建一个图形窗口,再循环内逐渐改变图形对象的相应属性值,并使用drawnow函数更新当前图形,整个循环就会表现出变化的动画效果。

    实例代码如下

    clear;
    clc;
    %% 新建图形窗口并设置初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
         [800 800 360 360],'name','图片切换动画效果');
     movegui(hFigure,'center');%设置居中
     %设置坐标轴属性
     hAxes=axes('Visible','off','units','normalized','position',[0 0 1 1]);
     
    %% 在图形窗口中显示图片 
     Im=imread('image.jpg');
     hIm=imshow(Im);
     [x,y,z]=size(Im);
    %% 修改属性并重绘
    for i=1:100
    I=Im(1:x/100*i,1:y/100*i,:);%逐渐放大显示
    set(hIm,'CData',I);
    drawnow;
    end

            代码5-8行新建图形窗口并为窗口中的对象设置初始属性,可以理解为给后面显示图像提供一个自定义的环境。首先第5行figure函数用于Figure图形窗口的创建,括号中参数设置相应属性,其中'menubar','none'表示禁用菜单栏;‘NumberTitle’,‘off’表示图形标题中不显示图形编号;‘Position’,'[800 800 360 360]'表示设置图形窗口的位置与大小,格式为[左 底 宽 高];‘Name’,'图片切换动画效果',表示设置图形窗口的标题。

           第7行设置图形窗口在居中位置。第9行axes函数用于Axes坐标对象的创建,即在当前图形窗口中新建一个坐标轴,括号里面参数设置上与figure格式相似,即设置坐标轴不可见、计量单位为常规、绘图区域的位置和大小设为[0 0 1 1]([左 底 宽 高])。

          第12-13行为读入图片,并在上面设置的坐标中显示图片,hIm为image(图形)对象的句柄,可通过句柄对该对象进行操作。

          第16-20行是在for循环中修改image(图形)对象的CData属性,并重绘图形从而实现动画的。具体的第18行中,set就是一个用于设置一般对象属性的函数,第一个参数hIm为图形句柄用于指定对哪个对象进行操作,这里就是image对象了;后面‘CData’,‘I’是指当前要显示的图像数据设置为矩阵I。整句就是指对hIm对象设置其要显示的图像这一属性为I。第19行drawnow就是将属性改变了的图形显示出来。

    实现的效果如图2.3.1所示

                                                                                      图2.3.1 程序动画效果

    3. 图片切换效果制作

           经过前面动画制作原理的介绍,这节就正式说说开头那个效果的实现了,为了便于编程实现(电影动画方式需先存后播编程稍显繁琐)这里采用程序动画的制作方式。首先需要准备几张长方形图片,为了方便后面处理其大小尺寸应该一致,即几张图像有相同长宽,并与接下来编写的M文件放在同一文件夹下。新建一个M文件命名为imageswitch.m,我们后面的编程都在该文件下进行。

    3.1 效果一实现

           如图3.1.1所示,将长方形图片做一个简单划分(这里我的图片尺寸为1920*1200),以宽度的大小为边长在中间掏出一个正方形,就是图中两条蓝色线条分割的中间部分,那么两条线的位置就是(1920-1200)/2和1920-(1920-1200)/2也就是360,和1560,如此一来这张图片就分成了左右两个长条和中间正方形区域了。

                                                                                              图3.1.1 分割图片

           现在一步步从头开始编写程序吧,首先实现的是第二幅图片的左边长条由顶部向下移动逐渐覆盖原图片的左边长条,同时右边的长条也逐渐被覆盖不过是由底部向上移动的。在程序中这一过程其实是一个图片矩阵中一部分元素逐渐被另一矩阵中元素所替换的过程。说白了图片的存储和处理都是以矩阵的形式,图3.1那张图片就是一个1920*1200*3的三维矩阵,左边长条的移动就是横坐标范围在1-360,纵坐标范围为1-1200的所有元素逐渐由第二张图数据矩阵的相同范围上的对应元素所赋值的过程了。我们看一段代码理解一下。

    function imageswitch1()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-09-27.jpg',...
        'BingWallpaper-2016-10-07.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/100;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
        for i=step:step:x
            % 改变图像数据
            Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
    end

           代码中第1-19行是新建图形窗口并对图形对象设置属性值为后面动画制作提供一个好的“环境”,在2.3节中已经详细介绍这里就不再赘述了。21-30行就是重点了,21行是设置一个赋值的范围跨度,值越大后面动画进行的速度就越快;22行的Length就是小长条的宽,为了方便后面用到;整个动画的实现在for循环中进行,第26行Im是将要显示的矩阵而后面的I2是下一张图片的数据矩阵,在第12行Im已经被赋值为第一张图片的数据矩阵I1了,现在要做的就是随着for循环的进行i的值逐渐增大长条逐渐被赋值了。22行语句如下

    Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);

          可以看到第二维和第三维的范围两边矩阵是相同的,都分别是1:Length、:,即第二维索引范围是1到Length(小长条的宽),第三维索引取全部范围(第三维可认为是对色彩的设定,“:”表示取索引全部范围,就可以认为是保留色彩了,实际还得理解下RGB图像的存储方式哦)。第一维范围为1到i,随i的增大越来越多的区域被I2中x-i+1到x范围的I2覆盖。同理第23行也是逐渐覆盖原有图像右边长条,所以这是第二维的范围应该是y-Length+1到y,而右边的长条下一张图片的那一部分是向下逐渐覆盖的,故第一维两个矩阵的索引范围与左边的相反。

           第24行将image对象的CData属性设置为赋值后的Im,即显示的图像是新的Im。第25行用drawnow函数重绘图形窗口,就会显示新的一帧。最终以上代码运行的动画效果如图3.1.2所示

                                                                                               图3.1.2 长条移动演示

           将中间正方形区域平均分成上下两部分,上部分区域由下一幅图片相应部分向右移动覆盖,下部分由下一幅图片相应部分向左移动覆盖,效果一的完整效果就是图3.1.3所示的

                                                                                          图3.1.3 效果一的完整效果

           这只要在上面实现长条的代码23-24间加上以下两行代码其原理与长条移动相同,只不过这时的索引范围需要有所改变上层范围为1到x/2,即上半部分,第二维Im是从Length+1(正方形开始的地方)至Length+i(随i的增大逐渐覆盖这个正方形宽度范围)被I2中最右边部分开始的像素部分取代,而第二行正好覆盖的方向相反。

    Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:);
    Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);

           效果一的完整代码如下,新建到imageswitch2.m文件中即可实现图3.1.3的效果

    function imageswitch2()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-09-27.jpg',...
        'BingWallpaper-2016-10-07.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
    
        for i=step:step:x
            % 改变图像数据
            Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:);
            Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:);
            Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        Im=I1;
    
    end

             同样可以将覆盖的方向改变,如取与上面相反的覆盖方向就可以实现又一种切换效果了。

    3.2 缩放效果制作

           对于中间的正方形区域可以设计一个缩放的效果,如图3.2.1所示。

                                                                                             图3.2.1 缩放演示效果

     

    这时对正方形赋值的代码如下     

    Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);

           要实现缩小就需要正方形区域的索引范围以一定速度缩小,最终由下一张图片完全覆盖,实现图3.2.1效果的完整代码如下

    function imageswitch3()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-10-13.jpg',...
        'BingWallpaper-2016-10-14.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
    while 1
        
        for i=x:-step:step  
            Im=I1;
            Im(x-i+1:x,1:Length,:)=I2(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I2(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        Im=I1;
    end
    end

           同样可以设计一个从中间放大而覆盖图像的效果,这只需要改变上面代码中for中的赋值部分就可以了,至于具体如何修改大家只要参考第4节中的完整代码就行了,限于篇幅这里就不多说了。

    3.3 将动画保存为GIF

           MATLAB 制作gif动态图的基本思想就是,将一张张的静态图组合成一张能动的gif图片,并保存到相应的位置。 那么,要想制作一张动态图,首先要有若干个静态图,并且他们的索引值是连续的。将我们制作的动画保存下来其完整代码如下

    function imageswitch4()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-10-13.jpg',...
        'BingWallpaper-2016-10-14.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
    
        jo=0;
        for i=x:-step:step  
            Im=I1;
            Im(x-i+1:x,1:Length,:)=I2(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I2(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
    
            jo=jo+1;
            %依次输出图片
            print(hFigure,'-dbmp',sprintf('%d',jo))   
        end
        
    %% 依次读取生成的所有图片
    for j=1:jo
        %获取当前图片
        A=imread(sprintf('%d.bmp',j));
        [I,map]=rgb2ind(A,256);
        %生成gif,并保存
        if(j==1)
            imwrite(I,map,'movefig.gif','DelayTime',0.1,'LoopCount',Inf)
        else
            imwrite(I,map,'movefig.gif','WriteMode','append','DelayTime',0.1)    
        end
    end
    
    end

     

           前面第1-33行代码与之前的代码一致,在第37行print(hFigure,'-dbmp',sprintf('%d',jo)) 中hFigure是当前图形窗口的图形句柄,指定输出当前窗口的图像,'-dbmp'指定输出文件格式,sprintf('%d',jo)是对bmp文件命名为jo。后面第41-51行的for循环是遍历刚刚生成的图片将其组合成gif文件,生成的gif文件如图3.2.2所示。

     

     

     

                                                                                                  图3.2.2 movefig.gif

    4. 完整代码

           实现文中开头图中的效果的完整代码如下所示,在MATLAB中新建一个m文件,命名为imageswitch.m运行即可。注意将相应图片放在m文件相同文件夹下,图片的命名需与代码中一致(也可修改代码中文件名)免得出错。下面是本文所用到的图片文件,需要的可以选中复制下来用于测试程序,只是需要改下文件名与这里一致。

    %作品:图片切换动画效果
    %作者:吴限 
    %2018.3.14
    function imageswitch()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-09-27.jpg',...
        'BingWallpaper-2016-10-07.jpg',...
        'BingWallpaper-2016-10-13.jpg',...
        'BingWallpaper-2016-10-14.jpg',...
        'BingWallpaper-2016-12-26.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    I3=imread(Imagename{3});I4=imread(Imagename{4});
    I5=imread(Imagename{5});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);I3=im2double(I3);
    I4=im2double(I4);I5=im2double(I5);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
    
    while 1
        % 动画效果一
        for i=step:step:x
            % 改变图像数据
            Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:);
    
            Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:);
            Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);
            
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
       
         % 动画效果二
        Im=I2;
        for i=x:-step:step
            Im=I4;
            Im(x-i+1:x,1:Length,:)=I3(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I3(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I3(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        
        
        %动画效果三
        Im=I3;
        for i=x:-step:step
            Im=I1;
            Im(1:i,1:Length,:)=I4(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I4(1:i,y-Length+1:y,:);
            
            Im(1:x/2,Length+1:Length+i,:)=I4(1:x/2,y-Length-i+1:y-Length,:);
            Im(x/2+1:x,y-Length-i+1:y-Length,:)=I4(x/2+1:x,Length+1:Length+i,:);
      
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow  ;%重绘当前图形窗口
        end
        
        %动画效果四
        Im=I4;
        for i=1:step:x
            Im(x-i+1:x,1:Length,:)=I5(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I5(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I5(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        
        Im=I5;
    end
    end

    用到的图片文件:

     

     

     

    BingWallpaper-2016-09-27.jpg

    BingWallpaper-2016-10-07.jpg

    BingWallpaper-2016-10-13.jpg

    BingWallpaper-2016-10-14.jpg

    BingWallpaper-2016-12-26.jpg

          本文中所有代码的完整m文件还有图片文件已经上传,代码经调试通过

    下载链接:https://download.csdn.net/download/qq_32892383/10288793

    有需要的朋友在评论区留言,可以将文件发送至你的邮箱。

    【公众号获取】
    本人微信公众号已创建,扫描以下二维码并关注公众号“AI技术研究与分享”,后台回复“IS20180315”即可获取全部资源文件。

    5. 结束语

           这就是利用MATLAB进行图片切换动画的全部内容了,还有很多炫丽的动画效果可以创造,将动画效果用到PPT演示和GUI设计等方面定能增色不少。本博文介绍的方法在多次修改之下,使其程序更加严谨。由于编者能力有限,代码即使经过了多次校对,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。

    展开全文
  • 【STM32】 keil软件介绍--工具栏

    千次阅读 2019-07-08 16:34:34
    Toolbars工具栏其实就是在菜单下面一行一行的快捷图标按钮,这些快捷按钮之所以归为工具栏里面,在于它们使用的频率较高。比如编译按钮,这个按钮在我们编程的时候使用的频率是相当高,其他快捷按钮同样也经常使用。...

    转载至:https://blog.csdn.net/ybhuangfugui/article/details/51501781

    Ⅰ、写在前面

    Toolbars工具栏其实就是在菜单下面一行一行的快捷图标按钮,这些快捷按钮之所以归为工具栏里面,在于它们使用的频率较高。比如编译按钮,这个按钮在我们编程的时候使用的频率是相当高,其他快捷按钮同样也经常使用。

     

    本文说的Toolbars工具栏和大部分上位机软件(如:Keil、IAR、VS、STM32CubeMX等)一样,只是工具栏的多少不同,工具栏中快捷按钮的多少不同而已。

     

    本文虽然以Keil MDK-ARM V5为例来讲述,其实Keil MDK-ARM 其它版本,以及Keil C51的各个版本也有同样工具栏,功能也一样。因此,本文也适合它们。

     

    Ⅱ、本文要点

    本文将详细讲述的Keil开发环境中的两项工具栏,如下图:

    第一行:文件工具栏(File Toolbar)

    第二行:编译工具栏(Build Toolbar)

     

    打开Keil软件默认是可以看见两行工具栏,如果没有看见,可以通过View菜单打开即可,如下图:

     

    工具栏的快捷按钮默认情况下,大部分快捷按钮都有对应的快捷键,在下面讲述的过程中,也会将有快捷键的列出来(本文不讲述快捷键,该系列教程专门整理快捷键的文章)。

     

    Ⅲ、工具栏详细说明

    我将两项工具栏分为10类(如下图),从左到右分别来进行讲述每一个快捷按钮的意思。当然,简单的按钮只简述一下,复杂一点的会重点讲述。

     

    1.文件操作类按钮

    这一类按钮可以说在大部分上位机软件都可见,比较简单,不过多描述。

    新建文件夹                     Ctrl + N

    打开文件                         Ctrl + O

    保存当前文件                 Ctrl + S

    保存所有文件                 无

    剪切                                 Ctrl + X

    复制                                 Ctrl + C

    粘贴                                 Ctrl + V

     

    2.文件编辑跳转类按钮

    撤销恢复按钮比较常用,可以使用快捷键代替。

    撤销编辑                           Ctrl + Z

    恢复编辑                           Ctrl + Y

    跳转到上一步                   Ctrl + -

    跳转到下一步                   Ctrl + Shift + -

     

    撤销恢复动画效果:

     

    跳转动画效果:

     

    3.书签类按钮

    书签的作用主要是标记位置方便查看。

    添加书签                            Ctrl + F2

    跳转到上一个书签             Shift + F2

    跳转到下一个书签             F2

    清空所有书签                    Ctrl + Shift + F2

     

    书签动画效果:

     

    4.选中行操作类按钮

    选中行操作的作用主要就是为了使选中行缩进、注释。

    插入缩进(Tab)                 Tab

    取消缩进(Tab)                 Shift + Tab

    确定注释                           无

    取消注释                           无

     

    缩进动画效果:

     

    注释动画效果:

     

    5.查找文本类按钮

    查找文本意思就是搜索,比较简单,也比较常用。

    查找所有文本                   Ctrl + Shift + F

    查找文本输入框               无

    查找单个文本                  Ctrl + F

    增加搜索                         Ctrl + I

     

    6.关于仿真类按钮

    这些按钮针对仿真时,对文本进行标记作用。

    打开/关闭调试        Ctrl + F5

    插入断点                           F9

    失能单个断点                   Ctrl + F9

    失能所有断点                   无

    取消所有断点                   Ctrl + Shift + F9

     

    7.窗口配置类按钮

    窗口                         无

    配置                         无

     

    窗口按钮支持快速打开/关闭某些窗口,具体见下图:

     

    8.关于编译类按钮

    这些按钮使用频率较高,特别对于F7快捷键。

    编译当前文件(单个)                  Ctrl + F7

    编译目标文件(修改过的)            F7

    编译所有目标文件(重新编译)    无

    编译多个工程文件(多工程)        无

    停止编译                                     无

    下载软件                                    F8

     

    9.工程选项类按钮

    工程目标选择框                   无

    工程目标选项(配置)            Alt + F7

     

    一个工程下面可以建立多个目标,工程目标选择框是选择工程目标所使用。通常对于初学者工程来说,一个工程下一般只有一个目标。因此,初学者通常在工程目标选择下拉选项中只看到一个目标。

    一个工程目标中重要的配置参数(如:输出Hex、选择ST-Link等)都在工程目标选项(配置) 中。本文只讲述这个按钮的功能,关于“工程目标选项(配置)”具体内容,我将单独整理一篇文章。

     

    10.工程项目管理类按钮

    单工程管理                       无

    多工程管理                       无

    管理运行时环境                无

    选择软件包                       无

    安装软件支持包                无

     

    工程项目管理关于初学者来说,只是单工程项目,主要使用第一个按钮,其他按钮基本上不使用。

     

    上面说的多工程管理,就是所谓的工作空间管理。

     

    关于选择软件包,这个按钮是Keil uVision5软件新增的一个按钮,也是Keil uVision5软件的一个特点。

     

    至此,上面就是关于Keil开发环境中两项工具栏:文件工具栏(File Toolbar) 和 编译工具栏(Build Toolbar)中所有快捷按钮的全部内容。

     

    展开全文
  • (工具栏不折叠)效果如下 导致错误原因: 没有给CollapsingToolbarLayout(折叠工具栏布局)设置滚动标志app:layout_scrollFlags。 应该设置app:layout_scrollFlags="scroll",才能滚动。 小结:在coordinatorLayout做父...
  •  废话多说,咱们第一篇文章就是模仿“知乎”的回答详情页的动画效果,先上个原版的效果图,咱们就是要做出这个效果  在实现之前,我们先根据上面的动画效果,研究下需求,因为gif帧数...
  • SIMetrix教程-003.菜单栏与工具栏介绍

    千次阅读 2020-06-25 13:30:40
      SIMetrix仿真软件和绝大部分软件一样,有菜单栏、工具栏、工作区、状态栏等等,只要静下心来看看,应付日常使用没有问题了。考虑到可能存在一些专业术语,下面对该软件做一个简单介绍。   首先大概介绍整个...
  • Android实用视图动画工具系列之六:通用表情,仿QQ微信聊天表情库,仿QQ微信聊天表情库框,这个目前市面上已经很多类似的功能了,我就做多的累赘,本表情的优势在于便于集成,而且适用于多种环境,可转换为...
  • 虽然现在手机屏幕越来越大,但一...其中用到的技术也只是监听屏幕滑动方向和滑动顶部和底部的判断而已还有就是动画效果--------废话多少,直接上源码 布局文件: <LinearLayout xmlns:android="http://sche
  • Android使用SVG实现炫酷动画效果

    千次阅读 2017-11-27 23:42:06
    这种图像格式在前端已经使用的非常广泛,而在移动端的开发,遇到一些复杂的自定义控件或者动画效果,我们就可以考虑使用SVG。一.Vector Drawable1.1 矢量图与位图1.矢量图像:SVG是W3C 推出的一种开放标准的文本...
  • Android实用视图动画工具系列之七:可定制Tab标签,ViewPaper和Fragment滑动标签视图。本视图工具根据PagerSlidingTabStrip改编优化,修复了部分Bug和增加了更多自定义选项。关于PagerSlidingTabStrip,它是配合...
  • 导航栏,标签栏,工具栏和状态栏

    万次阅读 2011-12-15 14:09:33
    状态栏,导航栏,标签栏和工具栏在iPhone应用程序具有特别定义的外观和行为的视图。它们需要在每个应用程序中都出现(在那些令人惊叹的应用程序经常是一个也出现),不过一旦决定让它们出现在应用程序,就...
  • ckeditor 工具栏配置

    千次阅读 2017-01-03 12:34:57
    toolbar的配置,有两个Full和...注意工具按钮是分组的,一个name内的大括号就是一个工具按钮分组,items后边是具体的按钮,“/”表示工具栏换行,“-”表示工具图标之间的隔线“|” [javascript] view plai
  • Visual C++编程技巧---工具栏和状态栏

    千次阅读 2013-04-18 19:28:10
    128.如何获取工具栏中的图标资源 129.如何在工具栏上设置背景图像 1 30.如何在工具栏上加载动画窗口 1 3 1.如何在工具栏上加载组合框控件 132.如何在工具栏上加载孚体组合框 1 33.如何为工具栏添加动态真彩按钮...
  • Android实用视图动画工具系列之八:带头部的Viewpaper,结合头部的Fragment切换效果,如果需要在Viewpaper增加一个头部,让头部在Viewpaper在向下滑动时隐藏,向上滑动时推出,这种情况Android的原生控件便无法...
  • 仿底部工具栏上滑消失下滑出现

    千次阅读 2016-01-16 11:18:04
    仿底部工具栏上滑消失下滑出现先看效果图吧!...最后是采用RelativeLayout作为父布局,底部的工具栏放到底部,然后监听ScrollView或ListView的滑动事件,然后隐藏或显示底部工具栏,配以动画即可。看我们的布局文件:
  • Keil(MDK-ARM)系列教程(二)_工具栏详细说明

    万次阅读 多人点赞 2016-06-12 00:03:37
    希望你也加入到人工智能的队伍来!http://www.captainbed.net/strongerhuang 我的网站:https://www.strongerhuang.com 我的知乎:https://www.zhihu.com/people/strongerHuang.com 推荐在我...
  •   对于MFC应用程序来说,为了改变MFC AppWizard自动生成的应用程序外观和大小,既可以在应用程序窗口创建之前进行,也可以在该窗口创建之后进行。 首先新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为: ...
  • Keil工具栏详细说明

    千次阅读 2018-08-22 21:35:58
    Toolbars工具栏其实就是在菜单下面一行一行的快捷图标按钮,这些快捷按钮之所以归为工具栏里面,在于它们使用的频率较高。比如编译按钮,这个按钮在我们编程的时候使用的频率是相当高,其他快捷按钮同样也经常使用。...
  • Unity工具栏与菜单栏

    千次阅读 2015-01-01 23:10:28
    2.2工具栏 一、变换Gizmo切换(Transform Gizmo): 1. 改变游戏对象的轴心点 Center:改变游戏对象的轴心为物体包围盒的中心。 Pivot:使用物体本身的轴心。 2. 改变物体的坐标 Global:世界坐标。 Local:...
  • IAR for ARM系列教程(二)_主窗口与工具栏的描述

    万次阅读 多人点赞 2016-11-28 22:46:18
    希望你也加入到人工智能的队伍来!http://www.captainbed.net/strongerhuang 我的网站:https://www.strongerhuang.com 我的知乎:https://www.zhihu.com/people/strongerHuang.com Ⅰ、写在前面 ...
  • CoordinatorLayout-带图片伸缩工具栏

    万次阅读 2015-06-09 17:49:04
    效果图:步骤一:在build.gilde添加以下代码dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.2.0' compile '...
  • 仿苹果的Dock工具栏

    千次阅读 2010-12-30 10:50:04
    最近发现一款仿苹果的Dock工具栏 StandaloneStack,可以用在XP或Win7效果不错。留下来备用 补充:配合另外一款软件RocketDock,可以很好的模拟macOS的Dock工具栏,配合使用效果不错 显示效果可以自定义...
  • Flutter进阶—实现动画效果(一)

    千次阅读 2017-05-16 18:29:09
    上一篇文章我们了解了Flutter的动画基础:Flutter进阶—解析动画,这一篇文章我们就来实现一个图表的动画效果。首先,我们需要创建一个新项目myapp,然后把main.dart的内容替换成下面的代码import 'package:flutter/...
  • 3.EWSTM8系列教程03_主窗口、工具栏的概述 4.EWSTM8系列教程04_菜单概述(一) 5.EWSTM8系列教程05_菜单概述(二) 6.EWSTM8系列教程06_工程节点选项配置(一) 7.EWSTM8系列教程07_工程节点选项配置(二) 8.....
  • 在iOS7之前,开发者为了寻求自定义Navigation Controller的Push/Pop动画,只能受限于子类化一个UINavigationController,或是用自定义的动画去覆盖它。但是随着iOS7的到来,Apple...自定义导航的Push/Pop动画 为了
  • 导航栏、标签栏、工具栏、状态栏

    万次阅读 2015-12-16 16:55:03
    在iPhone,工具栏位于屏幕部,其按钮数不能超过5个,如果超过5个,第5个按钮(最后一个)是更多按钮。 在iPad,工具栏位于屏幕,按钮的数没有制。 在工具栏中,我们除了可以放置UIBarButtonItem外,还可以放置其自定义...
  • 状态 虽然您难以控制状态的内容,但是您可以定制它的外观,并在一定程度上定制它的行为。具体来说,您可以: 设定网络活动指示器是否应该可见。如果您的应用程序正在执行的一项网络操作会持续几秒钟以上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,885
精华内容 12,754
关键字:

动画效果工具栏中不能进行