GVKun编程网logo

android.view.InflateException Error inflating class android.webkit.WebView

28

在本文中,您将会了解到关于android.view.InflateExceptionErrorinflatingclassandroid.webkit.WebView的新资讯,并给出一些关于Andro

在本文中,您将会了解到关于android.view.InflateException Error inflating class android.webkit.WebView的新资讯,并给出一些关于Android ClassNotFound和android.view.InflateException:、Android java.lang.ClassCastException:android.widget.LinearLayout无法强制转换为android.widget.TextView、Android LayoutInflater 使用详解 View.inflate 的加载原理、Android View inflateException的实用技巧。

本文目录一览:

android.view.InflateException Error inflating class android.webkit.WebView

android.view.InflateException Error inflating class android.webkit.WebView

每次在我的应用程序中使用棒棒糖(API 22)时,我都会显示一个Web视图,导致应用程序崩溃。我的Android开发人员控制台中与此事件相关的多次崩溃。

无需说它可以在Android 4、6和7上运行。

阅读堆栈跟踪(发布在这篇文章的末尾),有些困扰我

Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003

我搜索生成的R.java没有任何运气,显然是因为ID不存在,但是值得尝试。

搜寻该问题似乎与棒棒糖如何处理Webview有关。我基于在GDC崩溃报告器中找到的设备,用棒棒糖开始了新的AVD,并且可以重现该问题。

全栈跟踪:

android.view.InflateException: Binary XML file line #7: Error inflating class android.webkit.WebView at android.view.LayoutInflater.createView(LayoutInflater.java:633) at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at it.artecoop.ibreviary.WebViewFragment.onCreateView(WebViewFragment.java:67) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:607) at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at it.artecoop.ibreviary.WebViewFragment.onCreateView(WebViewFragment.java:67) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003 at android.content.res.Resources.getText(Resources.java:299) at android.content.res.Resources.getString(Resources.java:385) at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:684) at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:608) at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:631) at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:780) at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:619) at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:556) at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:311) at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:96) at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:263) at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:123) at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:110) at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144) at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:107) at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:260) at android.webkit.WebView.<init>(WebView.java:554) at android.webkit.WebView.<init>(WebView.java:489) at android.webkit.WebView.<init>(WebView.java:472) at android.webkit.WebView.<init>(WebView.java:459) at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:607) at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at it.artecoop.ibreviary.WebViewFragment.onCreateView(WebViewFragment.java:67) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

答案1

小编典典

如果你使用“ androidx.appcompat:appcompat:1.1.0”,请尝试使用“ androidx.appcompat:appcompat:1.0.2”。似乎1.1.0无法处理Android 5.1.1中的webview错误。

2020年2月更新:恢复1.0.2为许多人(包括我的应用程序)停止工作,但使用的最新版本androidx.appcompat:appcompat:1.2.0-alpha02确实修复了崩溃。(我在Google的自动“发布前报告”测试中在运行Android 5.0的华为P8 Lite上看到了它)。

Android ClassNotFound和android.view.InflateException:

Android ClassNotFound和android.view.InflateException:

我正在尝试将facebook整合到我的应用程序中.我使用从facebook下载的facebook示例应用程序作为参考(也在developer.facebook生成了appId和所有这个过程).我很懒,所以我不想通过所有的facebook sdk的代码.简单来说,我只是在我的应用程序中添加com_android_facebook库项目,并复制我的应用程序中的facebook示例应用程序中的所有类,Example.java除外

现在我修改MyActivity类看起来像Example.java类,意味着MyActivity现在拥有Example类的所有代码以及我的主Activity.

我改变了我的应用程序的布局

    <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout

   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   xmlns:android="http://schemas.android.com/apk/res/android"
  >
  <TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:textSize="22px"
    android:textColor="#ff00ff"
    android:gravity="center"
 >
  </TextView>

<com.android.facebook.LoginButton
 android:id="@+id/login"
 android:src="@drawable/login"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
/>

         
     
      

<Button android:id="@+id/uploadButton"
    android:text="@string/upload"
    android:visibility="invisible"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:paddingRight="20dp" 
    android:paddingLeft="20dp"
    android:layout_margin="20dp" 
    />

<Button android:id="@+id/requestButton"
    android:text="@string/request"
    android:visibility="invisible"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:paddingRight="20dp" 
    android:paddingLeft="20dp"
    android:layout_margin="20dp" 
    />


<Button android:id="@+id/postButton" 
    android:text="@string/post"
    android:visibility="invisible"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:paddingRight="20dp" 
    android:paddingLeft="20dp"
    android:layout_margin="20dp" 
    />

<Button android:id="@+id/deletePostButton" 
    android:text="@string/delete"
    android:visibility="invisible"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:paddingRight="20dp" 
    android:paddingLeft="20dp"
    android:layout_margin="20dp" 
    />

</RelativeLayout>

现在当我运行我的应用程序时,我遇到了错误

   10-14 00:58:37.786: ERROR/AndroidRuntime(3971): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.myapp/com.android.myapp.MyActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class com.android.facebook.LoginButton
   10-14 00:58:37.786: ERROR/AndroidRuntime(3971): Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class com.android.facebook.LoginButton
   10-14 00:58:37.786: ERROR/AndroidRuntime(3971): Caused by: java.lang.classNotFoundException: com.android.facebook.LoginButton in loader dalvik.system.PathClassLoader@44c06850

任何帮助,建议是最受欢迎的…

解决方法:

该SDK的主要源代码中没有LoginButton.
它仅在示例代码中可用,因此它无法加载不可用的类(ClassNotFoundException)…

Android java.lang.ClassCastException:android.widget.LinearLayout无法强制转换为android.widget.TextView

Android java.lang.ClassCastException:android.widget.LinearLayout无法强制转换为android.widget.TextView

我正在尝试打印listView中单击的值,但后来我得到以下异常:

07-04 10:40:56.482: E/AndroidRuntime(1356): FATAL EXCEPTION: main
07-04 10:40:56.482: E/AndroidRuntime(1356): java.lang.classCastException:      android.widget.LinearLayout cannot be cast to android.widget.TextView
07-04 10:40:56.482: E/AndroidRuntime(1356):     at com.passwordkeeper.ui.ActivityHomeScreen$1.onItemClick(ActivityHomeScreen.java:88)

这是一段代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mTextView = (TextView) findViewById(R.id.labelList);
    db = new DatabaseHandler(this);
    createList();
    displayList();
}   

createList函数正常工作.这是我的displayList方法:

public void displayList(){
    this.setlistadapter(new ArrayAdapter<String>(this, R.layout.activity_home_screen, R.id.listTextView, mAccountNames));
    mListView = getListView();
    mListView.setonItemClickListener(new OnItemClickListener(){
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            String product = ((TextView) view).getText().toString();
            Log.v("mSelectedProduct", product);
        }           
    });
}

我的文件activity_home_screen.xml的xml代码是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
    android:id="@+id/listTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="28dp"
    android:layout_marginTop="26dp"
    android:textAppearance="?android:attr/textAppearanceLarge" />  

任何帮助都会有用!

谢谢.

解决方法:

你可以试试这个

mListView.setonItemClickListener(new OnItemClickListener(){
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            TextView txtview = (TextView)view.findViewById(R.id.listTextView);
            String product = txtview.getText().toString();
            Log.v("mSelectedProduct", product);
        }           
    });

Android LayoutInflater 使用详解 View.inflate 的加载原理

Android LayoutInflater 使用详解 View.inflate 的加载原理

志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。

如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料。

  • Flutter 从入门 到精通系列文章在这里

  • 系列学习教程在这里

LayoutInflater 是用来将 layout.xml 布局文件添加到指定 View 中,或者是将 layout.xml 布局文件转化为对应的 View 对象。


1 LayoutInflater 的获取方式

第一种方式: 从给定的上 Context 下文中获取 LayoutInflater:

LayoutInflater  inflater = LayoutInflater.from(context);

或者是

LayoutInflater inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

第二种方式:在 Activity 中直接获取 LayoutInflater:

LayoutInflater inflater = getLayoutInflater();

从源码分析的角度,无论哪种方式,最终都是使用的 context.getSystemService 这种方式。

2 获取 View

2.1 View.inflate

我们通常会将 layout 布局文件加载成 View , 会这样来写

 /**
  *  Layout 文件 加载 View
  * 参数一 上下文对象
  * 参数二 布局文件 ID
  * 参数三 不为null 时自动将这个布局文件 加载到这个 root 中去  null 代表不添加
  */
View inflate = View.inflate(mContext, R.layout.activity_list1_item, null);

它调用的源码如下


    /**
     * Inflate a view from an XML resource.  This convenience method wraps the {@link
     * LayoutInflater} class, which provides a full range of options for view inflation.
     *
     * @param context The Context object for your activity or application.
     * @param resource The resource ID to inflate
     * @param root A view group that will be the parent.  Used to properly inflate the
     * layout_* parameters.
     * @see LayoutInflater
     */
    public static View inflate(Context context, @LayoutRes int resource, ViewGroup root) {
        LayoutInflater factory = LayoutInflater.from(context);
        return factory.inflate(resource, root);
    }

所以它实际上还是调用的 LayoutInflater.inflate 方法实现的加载。

2.2 LayoutInflater.inflate

/**
   *  参数一 上下文对象
   */
  LayoutInflater layoutInflater = LayoutInflater.from(mContext);
  /**
   * 将 Layout 文件 加载 View
   * 参数一 布局文件 ID
   * 参数二 不为null 时 会测量这个 parent 的大小来 作为 inflate 的父组件大小参考
   * 参数三 true 将加载的 layout 布局文件 自动添加到 parent 中去
   */
  View inflate = layoutInflater.inflate(R.layout.activity_list1_item, parent,false);

本文同步分享在 博客 “早起的年轻人”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

Android View inflateException

Android View inflateException

我正在尝试创建一个自定义视图 – 手指画,我遇到此错误的麻烦,我不知道如何解决它.谁能告诉我有什么问题?

logcat的:

08-04 08:34:01.171: E/AndroidRuntime(15664): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.boenka.mk/com.boenka.mk.Draw}: android.view.InflateException: Binary XML file line #9: Error inflating class com.boenka.mk.DrawPanel
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1956)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.os.Looper.loop(Looper.java:137)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.app.ActivityThread.main(ActivityThread.java:4424)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at java.lang.reflect.Method.invokeNative(Native Method)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at java.lang.reflect.Method.invoke(Method.java:511)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at dalvik.system.NativeStart.main(Native Method)
08-04 08:34:01.171: E/AndroidRuntime(15664): Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class com.boenka.mk.DrawPanel
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.app.Activity.setContentView(Activity.java:1835)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at com.boenka.mk.Draw.onCreate(Draw.java:49)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.app.Activity.performCreate(Activity.java:4465)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1920)
08-04 08:34:01.171: E/AndroidRuntime(15664):    ... 11 more
08-04 08:34:01.171: E/AndroidRuntime(15664): Caused by: java.lang.classNotFoundException: com.boenka.mk.DrawPanel
08-04 08:34:01.171: E/AndroidRuntime(15664):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at java.lang.classLoader.loadClass(ClassLoader.java:501)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at java.lang.classLoader.loadClass(ClassLoader.java:461)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.view.LayoutInflater.createView(LayoutInflater.java:552)
08-04 08:34:01.171: E/AndroidRuntime(15664):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
08-04 08:34:01.171: E/AndroidRuntime(15664):    ... 21 more

这是我的DrawingPanel类:

public class DrawingPanel extends View implements OnTouchListener {

    private Canvas mCanvas;
    private Path mPath;
    private Paint mPaint, mBitmapPaint;
    private ArrayList<PathPoints> paths = new ArrayList<PathPoints>();
    private ArrayList<PathPoints> undonePaths = new ArrayList<PathPoints>();
    private Bitmap mBitmap;
    private int x, y;
    private int color;

    public DrawingPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.color = Color.BLACK;
        // setFocusable(true);
        // setFocusableInTouchMode(true);
        this.setonTouchListener(this);
        mBitmapPaint = new Paint(Paint.DITHER_FLAG);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setColor(color);
        mPaint.setStyle(Paint.Style.stroke);
        mPaint.setstrokeJoin(Paint.Join.ROUND);
        mPaint.setstrokeCap(Paint.Cap.ROUND);
        mPaint.setstrokeWidth(3);
        mPaint.setTextSize(30);

        mPath = new Path();
        paths.add(new PathPoints(mPath, color, false));
        mCanvas = new Canvas();
    }

    public void colorChanged(int color) {
        this.color = color;
        mPaint.setColor(color);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        // mBitmap = AddReportItemActivity.mPhoto;
        float xscale = (float) w / (float) mBitmap.getWidth();
        float yscale = (float) h / (float) mBitmap.getHeight();
        if (xscale > yscale) // make sure both dimensions fit (use the
                                // smaller scale)
            xscale = yscale;
        float newx = (float) w * xscale;
        float newy = (float) h * xscale; // use the same scale for both
                                            // dimensions
        // if you want it centered on the display (black borders)
        mBitmap = Bitmap.createScaledBitmap(mBitmap, this.getWidth(),
                this.getHeight(), true);
        // mCanvas = new Canvas(mBitmap);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
        for (PathPoints p : paths) {
            mPaint.setColor(p.getColor());
            Log.v("", "Color code : " + p.getColor());
            if (p.isTextToDraw()) {
                canvas.drawText(p.textToDraw, p.x, p.y, mPaint);
            } else {
                canvas.drawPath(p.getPath(), mPaint);
            }
        }
    }

    private float mX, mY;
    private static final float TOUCH_TOLERANCE = 0;

    private void touch_start(float x, float y) {
        mPath.reset();
        mPath.moveto(x, y);
        mX = x;
        mY = y;
    }

    private void touch_move(float x, float y) {
        float dx = Math.abs(x - mX);
        float dy = Math.abs(y - mY);
        if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
            mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
            mX = x;
            mY = y;
        }
    }

    private void touch_up() {
        mPath.lineto(mX, mY);
        // commit the path to our offscreen
        mCanvas.drawPath(mPath, mPaint);
        // kill this so we don't double draw
        mPath = new Path();
        paths.add(new PathPoints(mPath, color, false));

    }

    @Override
    public boolean onTouch(View arg0, MotionEvent event) {
        float x = event.getX();
        float y = event.getY();

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            touch_start(x, y);
            invalidate();

            break;
        case MotionEvent.ACTION_MOVE:
            touch_move(x, y);
            invalidate();
            break;
        case MotionEvent.ACTION_UP:

            touch_up();
            invalidate();

            break;
        }
        return true;
    }

    public void onClickUndo() {
        if (paths.size() > 0) {
            undonePaths.add(paths.remove(paths.size() - 1));
            invalidate();
        } else {

        }
        // toast the user
    }

    public void onClickRedo() {
        if (undonePaths.size() > 0) {
            paths.add(undonePaths.remove(undonePaths.size() - 1));
            invalidate();
        } else {

        }
    }

    class PathPoints {
        private Path path;
        // private Paint mPaint;
        private int color;
        private String textToDraw;
        private boolean isTextToDraw;
        private int x, y;

        public PathPoints(Path path, int color, boolean isTextToDraw) {
            this.path = path;
            this.color = color;
            this.isTextToDraw = isTextToDraw;
        }

        public PathPoints(int color, String textToDraw, boolean isTextToDraw,
                int x, int y) {
            this.color = color;
            this.textToDraw = textToDraw;
            this.isTextToDraw = isTextToDraw;
            this.x = x;
            this.y = y;
        }

        public Path getPath() {
            return path;
        }

        public void setPath(Path path) {
            this.path = path;
        }

        public int getColor() {
            return color;
        }

        public void setColor(int color) {
            this.color = color;
        }

        public String getTextToDraw() {
            return textToDraw;
        }

        public void setTextToDraw(String textToDraw) {
            this.textToDraw = textToDraw;
        }

        public boolean isTextToDraw() {
            return isTextToDraw;
        }

        public void setTextToDraw(boolean isTextToDraw) {
            this.isTextToDraw = isTextToDraw;
        }

        public int getX() {
            return x;
        }

        public void setX(int x) {
            this.x = x;
        }

        public int getY() {
            return y;
        }

        public void setY(int y) {
            this.y = y;
        }

    }

    public int getColor() {
        return color;
    }

    public void clear() {
        invalidate();
    }

    public void setBrushSize(float size) {
        mPaint.setstrokeWidth(size);

    }

    public float getBrushSize() {
        return mPaint.getstrokeWidth();
    }
}

我的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/signImageParent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical" >

    <com.boenka.mk.DrawingPanel
        android:id="@+id/signatureview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <LinearLayout
        android:gravity="center_vertical"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:layout_alignParentLeft="true"
        android:id="@+id/control_panel"
        android:layout_width="50dp"
        android:background="#00AEEC"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <Button
            android:layout_gravity="center_horizontal"
            android:id="@+id/colorPicker"
            android:background="@drawable/color_picker"
            android:layout_width="40dp"
            android:layout_margin="5dp"
            android:layout_height="40dp" />
        <Button
            android:layout_gravity="center_horizontal"
            android:id="@+id/save_img"
            android:layout_margin="5dp"
            android:background="@drawable/save_as"
            android:layout_width="40dp"
            android:layout_height="40dp" />

        <Button
            android:layout_gravity="center_horizontal"
            android:id="@+id/brush_size"
            android:layout_margin="5dp"
            android:background="@drawable/brush_size"
            android:layout_width="40dp"
            android:layout_height="40dp" />

        <Button
            android:layout_gravity="center_horizontal"
            android:id="@+id/settings"
            android:layout_margin="5dp"
            android:background="@drawable/setting"
            android:layout_width="40dp"
            android:layout_height="40dp" />

        <Button
            android:layout_gravity="center_horizontal"
            android:id="@+id/prevIoUs"
            android:layout_margin="5dp"
            android:background="@drawable/prevIoUs"
            android:layout_width="40dp"
            android:layout_height="40dp" />
    </LinearLayout>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_toRightOf="@+id/control_panel" />

</RelativeLayout>

解决方法:

从发布的Logcat输出:

Caused by: android.view.InflateException: Binary XML file line #9: 
                                           Error inflating class com.boenka.mk.DrawPanel
....
....
Caused by: java.lang.classNotFoundException: com.boenka.mk.DrawPanel

您似乎在xml布局文件中意外拼错了自定义视图的名称:

<com.boenka.mk.DrawPanel
    android:id="@+id/signatureview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

看看将com.boenka.mk.DrawPanel更改为com.boenka.mk.DrawingPanel是否可以解决问题.

关于android.view.InflateException Error inflating class android.webkit.WebView的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android ClassNotFound和android.view.InflateException:、Android java.lang.ClassCastException:android.widget.LinearLayout无法强制转换为android.widget.TextView、Android LayoutInflater 使用详解 View.inflate 的加载原理、Android View inflateException的相关信息,请在本站寻找。

本文标签: