精华内容
下载资源
问答
  • 一组幻觉视图

    千次阅读 2010-11-22 23:13:00
    图中那几个是正方形吗? 它们是不是都扭曲了?         两个人那个高??? 你用直尺测量一下   盯着中间的十字号看 你会发现…………    

     

     

    你肯定看错了 里面都是正圆形的

     

     

     

    同心圆

     

     

     

    两个眼睛盯得方向不一样 为什么? 她们的眼睛可是一模一样啊

     

     

     

    看好了 图中的线都一样长的

     

    两个箭头指的长条颜色深浅一样吗?   答案是, 一样的.

     

     

    两个眼睛可是一样高啊

     

     

     

     

     

     

    盯着中间黑点一会 你会发现什么?

     

     

     

    看好了 左边的是人手 右边的是人

     

     

    眼睛盯着中间小点别动 头向后移动 看到什么了 ?

     

     

     

    中间是一个正圆形 你看到的是吗?

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    图中那几个是正方形吗? 它们是不是都扭曲了?

     

     

     

     

    两个人那个高???  你用直尺测量一下

     

    盯着中间的十字号看 你会发现…………

     

     

    展开全文
  • 在自定义视图中,有三函数可以重写用于界面绘制,在视图创建过程中,三函数的执行顺序依次是:onLayout、onDraw、dispatchDraw。 1、onLayout(boolean changed, int left, int top, int right, int bottom) :  ...

    三个可进行绘制的方法

    在自定义视图中,有三个函数可以重写用于界面绘制,在视图创建过程中,三个函数的执行顺序依次是:onLayout、onDraw、dispatchDraw。
    1、onLayout(boolean changed, int left, int top, int right, int bottom) : 
    onLayout用于定位该视图在上级视图中的位置,从其参数中就可以看出来。由于该函数没有画布,因此只适合绘制现成的视图控件。
    2、onDraw(Canvas canvas) : 
    自定义控件一般是重写onDraw方法,在画布中绘制各种图形。
    3、dispatchDraw(Canvas canvas) : 
    dispatchDraw与onDraw的区别在于:onDraw在绘制下级视图之前,而dispatchDraw在绘制下级视图之后,所以如果不想自己的绘图被下级视图覆盖的话,就要在dispatchDraw中进行绘制操作。为方便记忆,只要是从ViewGroup衍生出的视图,都用dispatchDraw,其他小控件都用onDraw。


    Canvas画布的使用

    Canvas是Android提供的图形操作类,Canvas的使用不难,多练习几次就熟练了。下面列出Canvas的常用方法:


    划定可绘制的区域(裁剪区域)

    虽然本视图内的所有区域都是可以绘制的,但是有时候我们还是只想在某个圆形区域或者矩形区域内部画画,那么在绘制之前就得指定允许绘制的区域大小
    clipPath : 裁剪不规则曲线区域
    clipRect : 裁剪矩形区域
    clipRegion : 裁剪一块组合区域


    在区域内部绘制图形

    drawArc : 绘制扇形
    drawBitmap : 绘制图像
    drawCircle : 绘制圆形
    drawLine : 绘制直线
    drawOval : 绘制椭圆
    drawPath : 绘制路径,即不规则曲线
    drawPoint : 绘制点
    drawRect : 绘制矩形
    drawRoundRect : 绘制圆角矩形
    drawText : 绘制文本


    移动整个画布

    rotate : 旋转画布
    scale : 缩放画布
    translate : 平移画布


    存取画布的状态

    Canvas的不同绘制操作会互相影响,比如说我们想对整个画布做旋转,除了某个直线(即该直线保持不动),如果没有状态机制,那么该直线也只能跟着旋转。有了状态机制,我们就可以在绘制该直线前保存画布状态(保存旋转操作),然后画直线,最后再恢复画布状态。这样在save-restore代码之间绘制的任何图形,都不会收到save-restore代码以外其他图形操作的影响。
    save : 保存画布状态
    restore : 恢复画布状态



    画笔Paint的使用

    在上述绘制图形函数当中,都需要指定Paint,Paint上定义了画笔的颜色、样式、粗细、阴影、下划线等等。Paint的常用操作包括:
    setAntiAlias : 设置是否使用抗锯齿功能,主要用于画圆圈等曲线
    setColor : 设置画笔的颜色
    setShader : 设置画笔的渐变效果
    setShadowLayer :  设置画笔的阴影
    setStyle : 设置画笔的样式(线条还是填充)
    setStrokeWidth : 设置线条的粗细
    setUnderlineText : 设置文本的下划线
    setStrikeThruText : 设置文本的删除线


    代码示例

    下面是一个自定义签名控件的代码示例:
    import java.util.ArrayList;
    
    import com.example.exmcustom.R;
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Bitmap;
    import android.graphics.Bitmap.Config;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    
    public class SignatureView extends View {
    	private static final String TAG = "SignatureView";
    	private Paint paint;
    	private Canvas cacheCanvas;
    	private Bitmap cachebBitmap;
    	private Path path;
    	private int paint_color = Color.BLACK;
    	private int stroke_width = 3;
    	private PathPosition pos = new PathPosition();
    	private ArrayList<PathPosition> pathArray = new ArrayList<PathPosition>();
    	private int mWidth=0, mHeight=0;
    
    	public SignatureView(Context context,AttributeSet attrs) {
    		super(context, attrs);
    		if (attrs != null) {
            	TypedArray attrArray=getContext().obtainStyledAttributes( attrs, R.styleable.SignatureView);
            	paint_color = attrArray.getColor(R.styleable.SignatureView_paint_color, Color.BLACK);
            	stroke_width = attrArray.getInt(R.styleable.SignatureView_stroke_width, 3);
            	attrArray.recycle();
    		}
    	}
    	
    	public SignatureView(Context context, AttributeSet attrs, int defStyleAttr) {
    		super(context, attrs, defStyleAttr);
    		if (attrs != null) {
            	TypedArray attrArray=getContext().obtainStyledAttributes( attrs, R.styleable.SignatureView);
            	paint_color = attrArray.getColor(R.styleable.SignatureView_paint_color, Color.BLACK);
            	stroke_width = attrArray.getColor(R.styleable.SignatureView_stroke_width, 3);
            	attrArray.recycle();
    		}
    	}
    
    	public SignatureView(Context context) {
    		super(context);
    	}
    
    	@Override
    	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    		mWidth = this.getMeasuredWidth();
    		mHeight = this.getMeasuredHeight();
    		Log.d(TAG, "onMeasure width="+mWidth+",height="+mHeight);
    		init(mWidth, mHeight);
    	}
    	
    	public SignatureView(Context context, int width, int height) {
    		super(context);
    		init(width, height);
    	}
    	
    	public int getPaintColor() {
    		return paint_color;
    	}
    	
    	public void setPaintColor(int paint_color) {
    		this.paint_color = paint_color;
    	}
    
    	public int getStrokeWidth() {
    		return stroke_width;
    	}
    	
    	public void setStrokeWidth(int stroke_width) {
    		this.stroke_width = stroke_width;
    	}
    
    	public Bitmap getCachebBitmap() {
    		return getDrawingCache();
    	}
    
    	private void init(int width, int height) {
    		paint = new Paint();
    		paint.setAntiAlias(true);
    		paint.setStrokeWidth(stroke_width);
    		paint.setStyle(Paint.Style.STROKE);
    		paint.setColor(paint_color);
    		path = new Path();
    
    		setDrawingCacheEnabled(true);
    		cachebBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
    		cacheCanvas = new Canvas(cachebBitmap);
    		cacheCanvas.drawColor(Color.WHITE);
    	}
    
    	public void clear() {
    		if (cacheCanvas != null) {
    			pathArray.clear();
    			cacheCanvas.drawRGB(255, 255, 255);
    			invalidate();
    		}
    	}
    
    	public void revoke() {
    		if (pathArray.size() > 0) {
    			pathArray.remove(pathArray.size()-1);
    			cacheCanvas.drawRGB(255, 255, 255);
    			for (int i=0; i<pathArray.size(); i++) {
    				Path posPath = new Path();
    				posPath.moveTo(pathArray.get(i).firstX, pathArray.get(i).firstY);
    				posPath.quadTo(pathArray.get(i).firstX, pathArray.get(i).firstY, 
    						pathArray.get(i).nextX, pathArray.get(i).nextY);
    				cacheCanvas.drawPath(posPath, paint);
    			}
    			invalidate();
    		}
    	}
    
    	@SuppressLint("DrawAllocation")
    	@Override
    	protected void onDraw(Canvas canvas) {
    		canvas.drawBitmap(cachebBitmap, 0, 0, null);
    		canvas.drawPath(path, paint); //这个是需要的,最近一次的路径保存在这里
    	}
    
    	private float cur_x, cur_y;
    
    	@SuppressLint("ClickableViewAccessibility")
    	@Override
    	public boolean onTouchEvent(MotionEvent event) {
    
    		float x = event.getX();
    		float y = event.getY();
    
    		switch (event.getAction()) {
    		case MotionEvent.ACTION_DOWN:
    			cur_x = x;
    			cur_y = y;
    			path.moveTo(cur_x, cur_y);
    			pos.firstX = cur_x;
    			pos.firstY = cur_y;
    			break;
    		case MotionEvent.ACTION_MOVE:
    			path.quadTo(cur_x, cur_y, x, y);
    			cur_x = x;
    			cur_y = y;
    			pos.nextX = cur_x;
    			pos.nextY = cur_y;
    			pathArray.add(pos);
    			pos = new PathPosition();
    			pos.firstX = cur_x;
    			pos.firstY = cur_y;
    			break;
    		case MotionEvent.ACTION_UP:
    			cacheCanvas.drawPath(path, paint);
    			path.reset();
    			break;
    		}
    
    		invalidate();
    		return true;
    	}
    }




    点此查看Android开发笔记的完整目录

    展开全文
  • 1。如果要创建基表是其它用户表的实体化视图,那么需要给实体化视图的owner赋予以下权限:grant CREATE ANY ...如果要创建refresh on commit的视图,那么还需要下面这权限:grant ON COMMIT REFRESH to username

    1。如果要创建基表是其它用户表的实体化视图,那么需要给实体化视图的owner赋予以下权限:
    grant CREATE ANY MATERIALIZED VIEW to username;
    grant SELECT ANY TABLE to username;
    如果要创建refresh on commit的视图,那么还需要下面这个权限:
    grant ON COMMIT REFRESH to username;

    2。创建refresh on commit的语法如下,此类实体化视图在基表的事务commit之后,就会立刻刷新
    CREATE MATERIALIZED VIEW MV_T1
    REFRESH FAST ON COMMIT WITH PRIMARY KEY AS SELECT * FROM kamus.t1;

    3。如果不指定on commit,那么默认是on demand,只有手工调用DBMS_MVIEW包中的刷新过程,实体化视图才会被刷新

    4。指定了start with ... next ...选项之后,第一次创建会有作一次完整刷新,然后在指定的时间间隔之后会定时刷新,本例中刷新间隔为1分钟。
    语法如下:
    CREATE MATERIALIZED VIEW MV_T1
    REFRESH FAST START WITH SYSDATE NEXT sysdate+1/24/60 WITH PRIMARY KEY AS SELECT * FROM kamus.t1;
    检查USER_REFRESH视图和USER_JOBS视图,我们可以发现start with... next ...语法也就是Oracle自动创建了一个刷新组,这个刷新组的名称跟实体化视图名称相同,并且IMPLICIT_DESTROY属性为Y,表示只要该组中的实体化视图删除该组也自动被删除。同时,创建了一个JOB,JOB中的waht属性是dbms_refresh.refresh('"SCOTT"."MV_T1"');
    自然,由于自动刷新是通过JOB完成的,那么初始化参数job_queue_processes必须大于0,这样JOB才会正常运行。

    5。可以自己创建刷新组来定时刷新,
    我以前的这篇文章中有创建刷新组的方法:
    http://blog.csdn.net/kamus/archive/2004/09/18/108496.aspx

    展开全文
  • 创建实体化视图几个注意点

    千次阅读 2004-10-26 23:45:00
    1。如果要创建基表是其它用户表的实体化视图,那么需要给实体化视图的owner赋予以下权限:grant CREATE ANY ...如果要创建refresh on commit的视图,那么还需要下面这权限:grant ON COMMIT REFRESH to username

    1。如果要创建基表是其它用户表的实体化视图,那么需要给实体化视图的owner赋予以下权限:
    grant CREATE ANY MATERIALIZED VIEW to username;
    grant SELECT ANY TABLE to username;
    如果要创建refresh on commit的视图,那么还需要下面这个权限:
    grant ON COMMIT REFRESH to username;

    2。创建refresh on commit的语法如下,此类实体化视图在基表的事务commit之后,就会立刻刷新
    CREATE MATERIALIZED VIEW MV_T1
    REFRESH FAST ON COMMIT WITH PRIMARY KEY AS SELECT * FROM kamus.t1;

    3。如果不指定on commit,那么默认是on demand,只有手工调用DBMS_MVIEW包中的刷新过程,实体化视图才会被刷新

    4。指定了start with ... next ...选项之后,第一次创建会有作一次完整刷新,然后在指定的时间间隔之后会定时刷新,本例中刷新间隔为1分钟。
    语法如下:
    CREATE MATERIALIZED VIEW MV_T1
    REFRESH FAST START WITH SYSDATE NEXT sysdate+1/24/60 WITH PRIMARY KEY AS SELECT * FROM kamus.t1;
    检查USER_REFRESH视图和USER_JOBS视图,我们可以发现start with... next ...语法也就是Oracle自动创建了一个刷新组,这个刷新组的名称跟实体化视图名称相同,并且IMPLICIT_DESTROY属性为Y,表示只要该组中的实体化视图删除该组也自动被删除。同时,创建了一个JOB,JOB中的waht属性是dbms_refresh.refresh('"SCOTT"."MV_T1"');
    自然,由于自动刷新是通过JOB完成的,那么初始化参数job_queue_processes必须大于0,这样JOB才会正常运行。

    5。可以自己创建刷新组来定时刷新,
    我以前的这篇文章中有创建刷新组的方法:
    http://blog.csdn.net/kamus/archive/2004/09/18/108496.aspx

    展开全文
  • 视图

    千次阅读 2013-02-26 17:08:20
    、什么是视图:  在ORACLE中,称视图为逻辑表。逻辑二字还是说明了视图不是真正的表。因为视图内根本就没有数据。视图的全部家当,也就是你创建视图时的SELECT语句。 二、创建视图: 1、创建视图的主法是...
  • 格式: createview表beginselectAFROMtable1unionallselectAFROMtable2unionallselectAFROMtable3END 注意点就是同表查询一样列和类型一致。 转载于:https://www.cnblogs.com/CreateFree/p/8336510.html...
  • 天有个小伙伴在群里问我,如何将6个视图平均分布在个 cell中,其实这样的布局在应用里很常见,比如6个菜单按钮,或者商城类应用的商品推荐部分。那么下面我就详细说一下我是怎么做的,希望可以帮助到更多的小...
  • RUP(Rational Unified Process),统一软件开发过程,统一软件过程是一个面向对象且基于网络的程序开发方法论。 在RUP中采用“4+1”视图模型来描述软件系统的体系结构。“4+1”视图包括逻辑视图、实现视图、进程...
  • flask视图函数种返回类型

    千次阅读 2019-06-17 09:17:55
    使用flask编写web应用程序时很重要的一个工作就是路由的视图函数编写。对于刚接触flask的人来说,有时候会觉得很奇怪,为什么路由的视图函数返回值有好种写法,今天总结一下视图函数返回值的种类,并简要分析一下...
  • 什么是视图?作用是什么?

    万次阅读 多人点赞 2018-08-14 09:31:16
    视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一名字,即视图名字。 视图本身并不包含任何数据,它只包含映射到基表的一查询语句,当基表数据发生...
  • 首先mysql的视图不是种物化视图,他相当于一个虚拟表,本身并不存储数据,当sql在操作视图时所有数据都是从其他表中查询出来的。者带来的问题是使用视图并不能将常用数据分离出来,优化查询速度,切操作视图的很多...
  • 在出现这个问题时,使用的解决方法是,关闭分页效果,利用UISrollView的代理方法,根据偏移量判断应该显示第几个item,从而计算出要显示的页码。 核心代码如下: - (void) scrollViewWillEndDragging:(UIScrollView ...
  • SQLite 视图(View)

    2020-12-16 17:22:42
    SQLite 视图(View) 视图(View)只不过是通过相关的名称存储在数据库中的一个 SQLite 语句。视图(View)实际上是一个以预定义的 SQLite 查询形式存在的...SQLite 视图是只读的,因此可能无法在视图上执行 DELETE、I
  • PostgreSQL View(视图

    2020-12-16 17:28:27
    View(视图)是种虚拟表,允许用户实现以下点: 用户或用户认为更自然或直观查找结构数据的方式。 限制数据访问,用户只能看到有限的数据,而不是完整的表。 汇总各种表中的数据,用于生成报告。 Postg
  • 视图是一个虚拟表,其内容由查询定义。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多表,或者其他视图。分布式查询也可以定义使用多异类源数据的视图。...
  • ThinkPHP视图模型

    2009-11-13 10:46:11
    视图通常是指数据库的视图,视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用...
  • Qt 之图形视图框架

    万次阅读 多人点赞 2016-07-20 16:59:13
    简述图形视图(Graphics View)提供了一个用于管理和交互大量自定义的二维图形对象(Item),以及一个支持缩放和旋转操作的视图部件用于显示这些视图项。框架包括一个事件传播架构,支持scene中的items进行精确的双...
  • 视图性能优化——索引视图

    万次阅读 2014-11-12 10:35:44
    原文:索引视图
  • 最近实现的一个需求需要用到模态视图,所以少不了与dismissViewController方法打交道。本文主要讲讲在使用dismissViewController方法过程中遇到的那些坑。由于业务逻辑比较特殊,程序中需要在A试图控制器中present...
  • 可以在控制器中进行封装或者直接交给视图去做,保证每个ACTION都只load一个视图文件。 2、让视图做它擅长的事情,不要在PHP代码中直接定义HTML,这样子会让程序和视图都难以维护,如果要加载HTML,可通
  • Oracle视图

    千次阅读 2019-06-09 17:37:00
    视图的本身是不包含任何数据,只是一个查询结果,当基表的数据发生变化时,视图里面的数据也会跟着发生变化。向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的SELECT语句。...
  • 视图函数

    千次阅读 2017-11-03 09:05:30
    一个HttpRequest实例通过正则表达式获取的位置参数通过正则表达式获得的关键字参数 在应用目录下默认有views.py文件,一般视图都定义在这文件中如果处理功能过多,可以将函数定义到不同的py文件中 新建views...
  • Django入门-6:视图定义和错误视图

    千次阅读 2017-09-25 08:52:59
    本质就是一个函数视图的参数一个HttpRequest实例通过正则表达式获取的位置参数通过正则表达式获得的关键字参数在应用目录下默认有views.py文件,一般视图都定义在这文件中如果处理功能过多,可以将函数定义到...
  • mysql视图之创建视图(CREATE VIEW)和使用限制

    万次阅读 多人点赞 2018-07-12 15:26:10
    mysql以两种方式处理对视图的查询:第种方式,MySQL会根据视图定义语句创建一个临时表,并在此临时表上执行传入查询。第二种方式,MySQL将传入查询与查询定义为一个查询并执行组合查询。mysql支持版本系统的视图...
  • SpringMVC视图解析器

    万次阅读 2015-01-01 14:00:31
    SpringMVC视图解析器 ...当我们对SpringMVC控制的资源发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,接着Spring会分析看哪一个HandlerMapping定义的所有请求映射中存在对该请求的最合理的映射。然后
  • 导航视图NavigationView 很多App都有个人中心的侧滑菜单,通常在页面左侧边缘右拉时,即可弹出个人中心的菜单页面。对于Android来说,侧滑功能用到了抽屉布局DrawerLayout,我们只要把页面的根布局设置为...
  • 什么是索引视图

    千次阅读 2011-04-15 19:20:00
    通常,这些视图的主要作用是: • 提供种安全机制,将用户限制到一个或多基表的某个数据子集中。 • 提供种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式。...
  • ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视图,SpringMVC中用于把View对象呈现给客户端的是View对象本身,而ViewResolver只是把逻辑视图名称解析为对象的View对象。View接口的主要作用是...
  • oracle物化视图的两典型应用场景

    千次阅读 2016-11-22 11:26:30
    物化视图是oracle一个比较有特色的东西,自oracle9i起,应用非常广泛,不像mysql,不支持原生物化视图,要借助flexviews去实现。物化视图到底有什么用呢?要回答这问题,必须先搞清楚物化视图与普通视图的区别: ...
  • 图形视图框架(The Graphic View Framework)用于管理和与大量定制的二维图形项目交互,以及用于可视化项目的视图小部件,支持缩放和旋转。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 207,180
精华内容 82,872
关键字:

一组视图是几个视图