自定义view

Anandroid运行时异常“Binary XML file line # : Error i...

时光怂恿深爱的人放手 提交于 2019-12-10 07:44:02
在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常,然后整个程序Crash掉...... 我遇到该问题常常都是因为修改了资源文件所引起,大致有以下几种方式来解决: 1. 引用类名问题:自定义了一个View,将他用于布局文件中,假设他的包名叫MyPackage,类名叫MyTestView,这个时候你在XML作为布局元素来布局的话,必须使用完整路径名,也就是包名加类名来引用,用MyPackage.MyTestView来进行引用。 2.构造函数问题:自定义一个View,必须派生实现基类View的三个构造函数 View(Context context) //Simple constructor to use when creating a view from code View(Context context, AttributeSet attrs) //Constructor that is called when inflating a view from XML View(Context context, AttributeSet attrs, int defStyle) //Perform inflation from XML and apply a class-specific base style 从文档上的介绍来看

iOS中storyboard故事板使用Segue跳转界面、传值

浪尽此生 提交于 2019-12-10 03:55:30
iOS中storyboard故事板使用Segue跳转界面、传值 目录 (?) [+] 摘要: 在iOS的开发过程中,不可避免的要设计界面,在android中有xml设置界面和直接使用java代码设置界面控件两种方式,在之前的ios开发中也是类似的有xib文件设置界面及用代码直接设置控件两种方法,但后来又出了一种方式,就是storyboard故事板子,其实storyboard和xib文件很像,最大的不同之处在于一个xib文件对应一个ViewController视图控制器,而storyboard对应多个,基本一个应用只需要一个storyboard就可以了,不再需要为每个控制器创建一个xib文件,从这点上来说,还是很方便的,在storyboard中查看各个界面的跳转也很方便,但之前一直使用xib进行开发,对storyboard的使用不太熟悉,今天好好学习了一下其中的界面跳转和传值,用到了Segue这个东西,这里借着例子说明一下。 创建工程: 首先创建一个新的工程,这里我创建的是Single View Application,就可以自带故事板了,如下图: 创建好后可以在左边文件列表中看到Main.stroyboard,这个就是故事板文件了,因为这里要实现界面跳转,只有自带的一个ViewController不够,我们再创建一个,command+N键创建一个Cocoa Touch Class。

Android应用小实例--跟随手指的小球

风格不统一 提交于 2019-12-09 22:47:03
实现效果图: 实现方式: 继承View类自己重绘一个圆,然后将这个自定义的继承于View类的加入到当前的Activity并且为这个自定义的View控件添加一个onTouchLitener事件 自定义组件继承于View类: [java] view plain copy print ? package com.jiahui.draw; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class DrawView extends View { public float currentX= 40 ; public float currentY= 50 ; //必须重写一个构造方法 public DrawView(Context context) { super (context); // TODO Auto-generated constructor stub } //重写onDraw方法通过Canvas绘画 @Override protected void onDraw(Canvas canvas) { super

【安卓深度控件开发(1.4)】Creating Custom Views (官方示例文档汉化版)(4)

假装没事ソ 提交于 2019-12-09 15:10:36
<h2>视图的优化</h2> <p>您现在有一个精心设计的视图,响应手势和平滑过渡,现在需要确保视图流畅。为了避免一个 UI 在播放过程中感觉缓慢或断断续续,您必须确保您的动画始终运行在每秒 60 帧。</p> <p> </p> <h3>少量的频繁处理</h3> <p>为了加快您的视图,在 <a href="http://developer.android.com/reference/android/view/View.html#onDraw(android.graphics.Canvas)" target="_blank">onDraw()</a> 中消除不必要的被频繁调用的例程代码,这将给你最大的回报。特别是在 <a href="http://developer.android.com/reference/android/view/View.html#onDraw(android.graphics.Canvas)" target="_blank">onDraw()</a> 中创建对象,因为这可能触发造成缓慢的垃圾回收。在初始化期间或动画之间分配对象。永远不要在动画运行时分配新对象。</p> <p>除了让 <a href="http://developer.android.com/reference/android/view/View.html#onDraw(android

【安卓深度控件开发(1.3)】Creating Custom Views (官方示例文档汉化版)(3)

假如想象 提交于 2019-12-09 15:03:57
<h2>创建视图交互</h2> <p>图形用户界面只是创建自定义视图的一部分。您还需要使视图以模仿现实世界行动相似的方式响应用户输入。对象始终应像真正对象做的一样。例如,图像应不立即弹出并重现在某个地方别的地方,因为在现实世界中的对象不会这样做。相反,图像应从一个位置移动到另一个位置。</p> <p>用户也感觉到细微的行为或界面上响应最佳模仿现实世界中的细微之处。例如,当用户甩动一个 UI 对象,他们应该感觉动作继续,摩擦然后在最终停止,最后的位置超出甩动发生时的位置。</p> <p>这节课演示如何使用 Android 框架的功能,将这些真实世界的行为添加到您的自定义视图。</p> <h3>处理输入的手势</h3> <p>像许多其他 UI 框架,android 系统支持输入的事件模型。用户操作都变成触发回调的事件,您可以重写自定义您的应用程序如何响应用户的回调。在 Android 系统中最常见的输入的事件是触摸,而触发 <a href="http://developer.android.com/reference/android/view/View.html#onTouchEvent(android.view.MotionEvent)" target="_blank">onTouchEvent(android.view.MotionEvent)</a>。重写此方法以处理事件:</p

Android 自定义View 画图—圆

我的未来我决定 提交于 2019-12-09 14:30:32
很多android初学者一碰到画图就无从下手,我就把我的画图和大家分享一下。 自定义画图,首先要继承view(也可是别的控件,这里只是画圆,固继承view就可)。 public class CustomView extends View{ } 其次,要有画笔: Paint paint= new Paint();//画笔 paint.setColor(Color. BLUE ); //画笔的颜色 开始画圆: 方法: Canvas .drawCircle(float cx, float cy, float radius, Paint paint) paint.setStyle(Style. STROKE );//空心圆 paint.setStrokeWidth(10);画笔宽度10 canvas.drawCircle(100*density, 100*density, 100*density-5, paint); 画直线:Canvas .drawLine(float startX, float startY, float stopX, float stopY, Paint paint) 例:Canvas.drawLine(0, 0, 100*density, 100*density, paint); 效果如下: 建了个交流群,欢迎讨论:416157653 来源: oschina 链接:

源码解析---android中ViewGroup的事件分发机制

我的未来我决定 提交于 2019-12-09 12:51:42
ViewGroup事件分发机制 1.概述 上一篇我们写过View的事件分发机制,如果你对这还不了解的可以看这一篇文章: https://my.oschina.net/quguangle/blog/793903 那么今天我们将继续上次未完成的话题,从源码的角度分析ViewGroup的事件分发。首先我们来探讨一下,什么是ViewGroup?它和普通的View有什么区别? 顾名思义,ViewGroup就是一组View的集合,它包含很多的子View和子VewGroup,是Android中所有布局的父类或间接父类,像LinearLayout、RelativeLayout等都是继承自ViewGroup的。但ViewGroup实际上也是一个View,只不过比起View,它多了可以包含子View和定义布局参数的功能。ViewGroup继承结构示意图如下所示: 可以看到,我们平时项目里经常用到的各种布局,全都属于ViewGroup的子类。 下面直接上案例: package qu.com.handlerthread; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android

Android触摸反馈

限于喜欢 提交于 2019-12-09 12:12:03
事件分发 当点击事件发生时,事件最先传递给Activity,Activity会首先将事件将被所属的Window进行处理,即调用 superDispatchTouchEvent() 方法。通过观察superDispatchTouchEvent()方法的调用链,我们可以发现事件的传递顺序: PhoneWinodw.superDispatchTouchEvent() DecorView.dispatchTouchEvent(event) ViewGroup.dispatchTouchEvent(event) 事件一层层传递到了ViewGroup里。 每到一个子view,看他的onInterceptTouchEvent 方法是否拦截,ontouch是否消费方法,如果没有继续向下dispatchTouchEvent分发事件,都不处理向上传,当回到顶级,若顶层(activity)也不对此事件进行处理,此事件相当于消失了(无效果)。 View没有onInterceptTouchEvent()方法,有dispatchTouchEvent,一但有点击事件传递给它,它的ouTouchEvent()方法就会被调用。 ouTouchEvent是否消费事件取决于 ACTION_DOWN 事件 或 POINT_DOWN 事件是否返回 为 true 递归 ViewGroup(View)

Focus事件处理

给你一囗甜甜゛ 提交于 2019-12-09 08:40:57
首先我们来看一下 View 是怎么获得 Focus 的 .Focus 是如何在 View 间跳转的呢? 查阅源码可以看到对 KeyEvent 的处理是在 ViewRootImpl.processKeyEvent() mView.dispatchKeyEvent(event) 对事件进行了分发,并且如果返回 true 将结束事件处理,返回 FINISH_HANDLED. 我们知道 view 对事件的处理都是从 dispatchKeyEvent 分发开始的,看一下 dispatchKeyEvent 的源码是怎样的呢? 如果 View 设置了 OnKeyListener, 并且 View 是 ENABLED 的 , 满足前面两个条件后,就会进行第三个条件判断,即回调 onKey 方法对事件进行处理。这里就会有个疑问了,如果 onKey 也返回 true, 那 dispatchKeyEvent 就直接返回 ture, 整个事件处理是不是就结束了? 这里可以进行一下测试: 对一个 view 设置 OnKeyListener, 并在 onKey 方法里,如果是 KEYCODE_DPAD_DOWN, 直接返回 true. 可以看到,当 Focus 在 TextView ,点击 KEYCODE_DPAD_UP , Focus 可以跳到 Button, 但是点击 KEYCODE_DPAD_DOWN

Android WebView视频全屏显示解决方案

[亡魂溺海] 提交于 2019-12-08 01:05:32
Android WebView 视频全屏显示解决方案 内容简介 Android WebView 视频显示解决方案,支持 WebView 视频全屏显示和隐藏,支持设置视频海报,支持设置 WebView 加载进度 View ,支持 WebView 视频翻转 demo 图片展示 核心源码 wv_web_view .setWebChromeClient( new WebChromeClient(){ Bitmap mVideoPoster = null ; View mVideoLoadingView = null ; View mFullScreenView ; /** * 设置默认的视频海报,也就是当 html Video 元素初始化完成后,默认显示在 video 窗口上的图片 * @return */ @Override public Bitmap getDefaultVideoPoster() { if ( mVideoPoster == null ){ mVideoPoster =BitmapFactory. decodeResource (getResources(),R.drawable. kgd ); } return mVideoPoster ; } /** * 设置 Html video 元素的视频加载进度 View * @return */ @Override