自定义view

Django 之 自定义中间件

五迷三道 提交于 2020-02-17 14:48:19
环境: django:1.10 python: 2.7 简介 中间件是一个轻量级、底层的插件系统,可以介入 django 的请求和响应处理过程,修改 django 的输入和输出。 在 django 1.10(不包含)以前每个中间件是一个独立的python类,在 django1.10 以后需要继承 MiddlewareMixin(django 1.10后也可以写成函数,这里不考虑)。 每个中间件可以包含以下几个方法中的一个或多个: __init__()、__call__()[django 1.10及以上]、process_request()、process_view()、process_template_response()、process_response()、process_exception(). 示例: 在app目录下新建文件,名字随意,内容如下: 1 # coding: utf-8 2 from django.http import HttpResponse 3 try: 4 from django.utils.deprecation import MiddlewareMixin # Django 1.10.x 5 except ImportError: 6 MiddlewareMixin = object # Django 1.4.x - Django 1.9.x 7 8

django之中间件

一笑奈何 提交于 2020-02-17 11:42:48
中间件是什么? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。但是由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。 说的直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法。 我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下图的MIDDLEWARE配置项。 #这是默认的7个中间件,总共有7个 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib

自定义 View:Draw 过程

浪子不回头ぞ 提交于 2020-02-17 11:22:26
1、作用 作用:绘制 View。 2、Draw 过程 View 的绘制过程:draw()->drawBackground(绘制背景)->onDraw(绘制内容,重写)->dispatchDraw(绘制子view,空实现)->onDrawForeground(绘制装饰(滚动指示器、滚动条、前景等)) View.java public void draw(Canvas canvas) { final int privateFlags = mPrivateFlags; final boolean dirtyOpaque = (privateFlags & PFLAG_DIRTY_MASK) == PFLAG_DIRTY_OPAQUE && (mAttachInfo == null || !mAttachInfo.mIgnoreDirtyState); mPrivateFlags = (privateFlags & ~PFLAG_DIRTY_MASK) | PFLAG_DRAWN; /* * Draw traversal performs several drawing steps which must be executed * in the appropriate order: * * 1. Draw the background * 2. If necessary, save the

Android 自定义通用Dialog

夙愿已清 提交于 2020-02-15 08:07:04
public MyDialog(Context context, int width, int height, View layout) { super(context, R.style.DialogTheme); setContentView(layout); Window window = getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.width = width; params.height = height; params.gravity = Gravity.CENTER; //显示的位置 window.setAttributes(params); } 使用: int width = getResources().getDisplayMetrics().widthPixels;//获取popwindow展示的宽 int height = getResources().getDisplayMetrics().heightPixels;//获取popwindow展示的高 MyDialog mMyDialog = new MyDialog(this, width * 3 / 4 , height * 3 / 5, view, R.style.DialogTheme);

图解Android View的scrollTo(),scrollBy(),getScrollX(), getScrollY()

风格不统一 提交于 2020-02-15 07:11:27
图解Android View的scrollTo(),scrollBy(),getScrollX(), getScrollY() - bigconvience的专栏 - 博客频道 - CSDN.NET Android系统手机屏幕的左上角为坐标系,同时y轴方向与笛卡尔坐标系的y轴方向想反。通过提供的api如 getLeft , getTop , getBottom , getRight可以获得控件在parent中的相对位置。同时,也可以获得控件在屏幕中的绝对位置,详细用法可参考 android应用程序中获取view的位置 当我们编写一些自定义的滑动控件时,会用到一些api如scrollTo(),scrollBy(),getScrollX(), getScrollY()。由于常常会对函数getScrollX(), getScrollY()返回的值的含义产生混淆,尤其是正负关系,因此本文将使用几幅图来对这些函数进行讲解以方便大家记忆。 注意:调用View的scrollTo()和scrollBy()是用于滑动View中的内容,而不是把某个View的位置进行改变。如果想改变莫个View在屏幕中的位置,可以使用如下的方法。 调用public void offsetLeftAndRight(int offset)用于左右移动方法或public void offsetTopAndBottom

图解Android View的scrollTo(),scrollBy(),getScrollX(), getScrollY()

风格不统一 提交于 2020-02-15 07:11:07
https://blog.csdn.net/bigconvience/article/details/26697645 Android系统手机屏幕的左上角为坐标系,同时y轴方向与笛卡尔坐标系的y轴方向想反。通过提供的api如getLeft , getTop, getBottom, getRight可以获得控件在parent中的相对位置。同时,也可以获得控件在屏幕中的绝对位置,详细用法可参考 android应用程序中获取view的位置 当我们编写一些自定义的滑动控件时,会用到一些api如scrollTo(),scrollBy(),getScrollX(), getScrollY()。由于常常会对函数getScrollX(), getScrollY()返回的值的含义产生混淆,尤其是正负关系,因此本文将使用几幅图来对这些函数进行讲解以方便大家记忆。 注意:调用View的scrollTo()和scrollBy()是用于滑动View中的内容,而不是把某个View的位置进行改变。如果想改变莫个View在屏幕中的位置,可以使用如下的方法。 调用public void offsetLeftAndRight(int offset)用于左右移动方法或public void offsetTopAndBottom (int offset)用于上下移动。 如:button

完美解决Android在listview添加checkbox实现单选多选操作问题

穿精又带淫゛_ 提交于 2020-02-15 03:19:12
在Android某些开发需求当中,有时候需要在 listveiw 中加入 checkbox 实现单选,多选操作。表面上看上去只是改变checkbox那么简单,然而实际开发中,实现起来并不是那么得心应手。尤其当listview比较多(比如屏幕最多只能显示10个item,但总共有12个item,也就是说listview的item数大于屏幕能够显示的item数)滑动屏幕的时候,由于适配器中getview()会重复使用被移除屏幕的item,所以会造成checkbo x选择状态不正常的现象。自己在开发中碰到这样的问题很是苦恼,查了下资料,发现网上很少没有针对这类批量操作并没有一个完整的例子。搜了很多篇帖子才完美的实现这一常用的操作。所以在这里把这个Demo贴出来,供大家参考,希望能对大家有所帮助。 主界面的布局main.xml 这个就不多说什么 [html] view plain copy <? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android

Android中的Android中的Surface和SurfaceView

余生颓废 提交于 2020-02-12 04:21:35
一、什么是Surface 简单的说Surface对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都要画在Surface上。传统的view共享一块屏幕缓冲区,所有的绘制必须在UI线程中进行。 在SDK的文档中,对Surface的描述是这样的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻译成中文就是“由屏幕显示内容合成器(screen compositor)所管理的原始缓冲区的句柄”,这句话包括下面两个意思: 1、通过Surface(因为Surface是句柄)就可以获得原生缓冲器以及其中的内容。就像在C++语言中,可以通过一个文件的句柄,就可以获得文件的内容一样。 2、 原始缓冲区(a raw buffer)是用于保存当前窗口的像素数据的。 引伸地,可以认为Android中的Surface就是一个用来画图形(graphics)或图像(image)的地方。 根据Java方面的常规知识,我们知道通常画图是在一个Canvas对象上面进行的,由此,可以推知一个Surface对象中应该包含有一个Canvas(画布)对象。因此,在前面提及的两个意思的基础上,可以再加上一条: 3、Surface中有一个Canvas成员,专门用于画图的。 由以上的概括,我们总结如下

Android自定义滑动开关按钮

≡放荡痞女 提交于 2020-02-12 04:19:45
一、效果图 二、主要技术点   1.自定义View   2.自定义属性 三、自定义控件的步骤   1.自定义类继承自View或View的子类;   2.重写构造方法     (1)MyView(Context); // 在代码中new 对象时调用此方法     (2)MyView(Context,AttributeSet); // 在XML布局文件中声明此View,创建对象时,由系统自动调用     (3)MyView(Context,AttributeSet,int); // 与方法2用法一样,只是多了一个参数:默认样式   3.重写相关方法,实现我们的需求,一般要重写的方法:     (1)onMeasure(int,int); // 系统测量控件大小时调用该方法     (2)onLayout(boolean,int,int,int,int); // 系统为该view 指定位置时调用此方法,子view的位置,自身只有建议权,决定权在父view的手中。一般不需要重写。     (3)onDraw(Canvas); // 为本view绘制内容时,调用该方法。 四、为新控件添加自定义属性的步骤:   1.在attrs.xml文件中声明属性,有属性名(name)和格式(format)。如 <?xml version="1.0" encoding="utf-8"?>

自定义View--一个简单地圆形Progress效果

岁酱吖の 提交于 2020-02-12 04:16:44
先看效果图吧 我们要实现一个自定义的再一个圆形中绘制一个弧形的自定义View,思路是这样的:   先要创建一个类ProgressView,继承自View类,然后重写其中的两个构造方法,一个是一个参数的,一个是两个参数的,因为我们要在xml文件中使用该自定义控件,所以必须要定义这个两个参数的构造函数。创建完了这个类后,我们先不去管它,先考虑我们实现的这个自定义View,我们想让它的哪些部分可以由使用者自己指定,比如说这个Demo中我们让他的外面圆的外边框颜色和宽度,还有扇形部分的颜色,扇形增长的速度等等属性,这时候我们要在项目工程目录的res/values目录下创建一个资源文件命名为attrs(注意,名字随意,只是大多数情况下都这么叫而已),然后我们在这个资源文件中添加我们想要的属性,如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <declare-styleable name="ProgressView"> 4 <!--circleColor 设置圆形边框的颜色 sweepColor设置扇形变换的颜色 5 startAngle 设置起始角度 sweepStep 设置变换的步长--> 6 <attr name="circleColor" format="color|reference"></attr> 7