在本文中,您将会了解到关于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 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
每次在我的应用程序中使用棒棒糖(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:
我正在尝试将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
我正在尝试打印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 的加载原理
志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。
如果你有兴趣 你可以关注一下公众号 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
我正在尝试创建一个自定义视图 – 手指画,我遇到此错误的麻烦,我不知道如何解决它.谁能告诉我有什么问题?
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的相关信息,请在本站寻找。
本文标签: