Android Studio 增加 Customized View

首先还是要单独建立一个 Java Class,继承 android.view.View 来实现自己的 Cutomized View,记住,必须单独建立这个 Java Class,不能偷懒混在 Activity 里面,否则是要失败的。失败的原因暂且归结于 Android 上面的这套界面编辑还不够完美,也有可能是 Java 本身的 Package 的实例化上有问题(后者的可能性可能更大吧。。。)乱猜的,别当真!!!

Android Studio 增加 Customized View_第1张图片

编辑 content_XXX.xml,增加一个 Customized View,选择那个你创建的 View

Android Studio 增加 Customized View_第2张图片

最后,如果碰到 Edit 中的 Rendering 问题,就用下面那个函数去解决,Java 这种虚拟机里面运行的语言,动态性确实比 C++ 强。

onDraw(Canvas canvas) {
    (!isInEditMode() ) {
        canvas.drawColor();
        canvas.drawBitmap(, , , );
        canvas.drawPath(, );
    }
}

public boolean isInEditMode ()

Added in API level 3

Indicates whether this View is currently in edit mode. A View is usually in edit mode when displayed within a developer tool. For instance, if this View is being drawn by a visual user interface builder, this method should return true. Subclasses should check the return value of this method to provide different behaviors if their normal behavior might interfere with the host environment. For instance: the class spawns a thread in its constructor, the drawing code relies on device-specific features, etc. This method is usually checked in the drawing code of custom widgets.

Returns
  • True if this View is in edit mode, false otherwise.

接下来会碰到的问题是 Crash,程序运行后抛出异常!实际上问题的根源系统在上面已经给出了。

 Rendering Problems:Custom view FingerPaintView is not using the 2- or 3-argument View constructors;

Android Studio 增加 Customized View_第3张图片

通过异常的分析,我们能够找到问题的源头,确实是缺少构造函数,那么简单补一个。

FingerPaintView(Context c) {
    (c);

    = Path();
    = Paint(Paint.);
}

FingerPaintView(Context c, AttributeSet attrs) {
    (c, attrs);

    = Path();
    = Paint(Paint.);
}

FingerPaintView(Context c, AttributeSet attrs, defStyleAttr) {
    (c, attrs, defStyleAttr);

    = Path();
    = Paint(Paint.);
}

可以了就这样了,当然还有和 xml 关联的问题,暂时就先不管了。长长的路,我们慢慢的走。

你可能感兴趣的:(Android Studio 增加 Customized View)