Android的 - 拍摄照片用相机 [英] Android - Taking a picture with a camera

查看:178
本文介绍了Android的 - 拍摄照片用相机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的机器人,而我试图让我的应用程序需要从相机拍摄照片。看着这里的例子提供,我想在我的应用程序来实施 MainActivity.java 这样:

 公共类MainActivity扩展ActionBarActivity {@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main); // 17行
}
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    //充气菜单;如果是present这增加了项目操作栏。
    。getMenuInflater()膨胀(R.menu.menu_main,菜单);
    返回true;
}@覆盖
公共布尔onOptionsItemSelected(菜单项项){
    //处理动作栏项目点击这里。操作栏会
    //自动处理上点击主页/向上按钮,只要
    //你在AndroidManifest.xml中指定一个父活动。
    INT ID = item.getItemId();    // noinspection SimplifiableIfStatement
    如果(ID == R.id.action_settings){
        返回true;
    }    返回super.onOptionsItemSelected(项目);
}静态最终诠释REQUEST_IMAGE_CAPTURE = 1;公共无效dispatchTakePictureIntent(查看视图){
    意图takePictureIntent =新意图(MediaStore.ACTION_IM​​AGE_CAPTURE);
    startActivityForResult(takePictureIntent,REQUEST_IMAGE_CAPTURE);
}
}

下面是我的 activity_main.xml中

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s的android:layout_width =match_parent
    机器人:layout_height =match_parent机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    机器人:paddingTop =@扪/ activity_vertical_margin
    机器人:paddingBottom会=@扪/ activity_vertical_margin工具:上下文=MainActivity。>    <的TextView的android:文本=@字符串/欢迎的android:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT机器人:layout_centerHorizo​​ntal =真
        机器人:TEXTSIZE =40dp机器人:文字样式=大胆的机器人:文字颜色=#990000/>
    < GridView控件
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:为numColumns =2
        机器人:columnWidth时=50dp
        机器人:重力=CENTER_HORIZONTAL>
            <按钮
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:文字=@字符串/ picture_1
                安卓的onClick =dispatchTakePictureIntent/>
        < / GridView的>< / RelativeLayout的>

我收到以下错误:

 了java.lang.RuntimeException:无法启动活动ComponentInfo {--- / MainActivity}:java.lang.UnsupportedOperationException:addView(查看,的LayoutParams)不支持的适配器视图
        在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
        在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
        在android.app.ActivityThread.access $ 800(ActivityThread.java:139)
        在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1210)
        在android.os.Handler.dispatchMessage(Handler.java:102)
        在android.os.Looper.loop(Looper.java:136)
        在android.app.ActivityThread.main(ActivityThread.java:5102)
        在java.lang.reflect.Method.invokeNative(本机方法)
        在java.lang.reflect.Method.invoke(Method.java:515)
        在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
        在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        在dalvik.system.NativeStart.main(本机方法)
        java.lang.UnsupportedOperationException:引起addView(查看,的LayoutParams)不支持的适配器视图
        在android.widget.AdapterView.addView(AdapterView.java:478)
        在android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
        在android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
        在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        在android.view.LayoutInflater.inflate(LayoutInflater.java:353)
          在android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegaeBase.java:228)
        在android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
        在--- /。MainActivity.onCreate(MainActivity.java:17)
        在android.app.Activity.performCreate(Activity.java:5248)
        在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
        在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
在android.app.ActivityThread.access $ 800(ActivityThread.java:139)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1210)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:136)
在android.app.ActivityThread.main(ActivityThread.java:5102)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
在dalvik.system.NativeStart.main(本机方法)

我可能做错事,所以任何人都可以指出我的错误?先谢谢了。


解决方案

  

UnsupportedOperationException异常:addView(查看,的LayoutParams)不
  支持适配器视图


适配器视图的一个子类(在你的情况GRIDVIEW)不能有孩子无论是在布局文件中手动添加或code补充说。

您code:

 < GridView控件
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:为numColumns =2
        机器人:columnWidth时=50dp
        机器人:重力=CENTER_HORIZONTAL>
            <按钮
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:文字=@字符串/ picture_1
                安卓的onClick =dispatchTakePictureIntent/>
        < / GridView的>

不要这么做

由于这将调用GridView控件的方法addView,抛出异常。而是使用:

 < GridView控件
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:为numColumns =2
            机器人:columnWidth时=50dp
            机器人:重力=CENTER_HORIZONTAL/>

此外,如果您在活动或适配器(其getView法)code使用LayoutInflater.inflate方法,不通过GridView控件作为第二个参数。例如,不使用:

  convertView = inflator.inflate(R.layout.child,父母);

而是使用:

  convertView = inflator.inflate(R.layout.child,父母,假);

I am new to android, and I am trying to make my app take a picture from the camera. Looking at the example provided here, I tried to implement in my app in MainActivity.java as such:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); // line 17
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

static final int REQUEST_IMAGE_CAPTURE = 1;

public void dispatchTakePictureIntent(View view) {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}

Here is my activity_main.xml:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="@string/welcome" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_centerHorizontal="true"
        android:textSize="40dp" android:textStyle="bold" android:textColor="#990000"/>
    <GridView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numColumns="2"
        android:columnWidth="50dp"
        android:gravity="center_horizontal">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/picture_1"
                android:onClick="dispatchTakePictureIntent"/>
        </GridView>

</RelativeLayout>

I am getting the following error:

java.lang.RuntimeException: Unable to start activity ComponentInfo{---/.MainActivity}: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
        at android.app.ActivityThread.access$800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5102)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
        at android.widget.AdapterView.addView(AdapterView.java:478)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
          at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegaeBase.java:228)
        at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
        at ---/.MainActivity.onCreate(MainActivity.java:17)
        at android.app.Activity.performCreate(Activity.java:5248)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
            at android.app.ActivityThread.access$800(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5102)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

I am probably doing something wrong, so can anyone point out my mistake? Thanks in advance.

解决方案

UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView

A subclass of AdapterView (in your case GRIDVIEW) can't have children manually added either in the layout file or added in code.

Your code:

 <GridView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numColumns="2"
        android:columnWidth="50dp"
        android:gravity="center_horizontal">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/picture_1"
                android:onClick="dispatchTakePictureIntent"/>
        </GridView>

Don't do it!

As this will call the addView method of GridView, throwing the exception. Instead use:

      <GridView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numColumns="2"
            android:columnWidth="50dp"
            android:gravity="center_horizontal"/>

Also, if you use the LayoutInflater.inflate method in the code of the Activity or the adapter(its getView method), don't pass the GridView as the second parameter. For example, don't use:

convertView  = inflator.inflate(R.layout.child, parent);

Instead use:

convertView  = inflator.inflate(R.layout.child, parent, false);

这篇关于Android的 - 拍摄照片用相机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆