1

ピクセルの色を知りたい画像ビューを使用しているので、getpixel()...メソッドを使用していますが、エラーが表示されます....これはgetpixelメソッドを使用している方法です。

image  = BitmapFactory.decodeResource(getResources(), rid);
                pixel = image.getPixel((int)x,(int)y);
                k.setText(Integer.toString(pixel)); 

エラーが表示されています......。

05-24 13:29:38.101: E/AndroidRuntime(21987): FATAL EXCEPTION: main
05-24 13:29:38.101: E/AndroidRuntime(21987): java.lang.NullPointerException
05-24 13:29:38.101: E/AndroidRuntime(21987):    at com.example.nam.FirstImage.pageinfo(FirstImage.java:100)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at com.example.nam.FirstImage.onTouch(FirstImage.java:63)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.View.dispatchTouchEvent(View.java:3881)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1769)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1135)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.app.Activity.dispatchTouchEvent(Activity.java:2096)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1753)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2227)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1886)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.os.Looper.loop(Looper.java:130)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at android.app.ActivityThread.main(ActivityThread.java:3687)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at java.lang.reflect.Method.invokeNative(Native Method)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at java.lang.reflect.Method.invoke(Method.java:507)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
05-24 13:29:38.101: E/AndroidRuntime(21987):    at dalvik.system.NativeStart.main(Native Method)

編集 ::::

public class FirstImage extends ImageView implements OnTouchListener {


    MotionEvent event;
    TextView k;
    int rid;
    int pixel;
    Bitmap image;
    String huma ="human";
    String info = "human";
     float x = 0; //init value 
     float y = 0; //init value
     Animation animationFadeIn;
    int t=0;
    int i=1;

    public FirstImage(Context context) { 
        super(context); 
        k=(TextView)findViewById(R.id.textView1);



        } 
    public FirstImage(Context context, AttributeSet attrs) { 
        super(context, attrs);
        k=(TextView)findViewById(R.id.textView1);
        } 


    public void changeImage(int id){

                    this.setImageResource(id);
                rid=id;
                    final Animation animationFadeout=AnimationUtils.loadAnimation(getContext(), R.anim.zoomin);
                    this.startAnimation(animationFadeout);
                    this.setOnTouchListener(this);

    }
    @Override
    public boolean onTouch(View arg0, MotionEvent me) {

        switch(me.getAction()){
        case MotionEvent.ACTION_DOWN:
            x=me.getX();
            y= me.getY();
            pageinfo(x,y);
            break;
        case MotionEvent.ACTION_MOVE:
            x=me.getX();
            y= me.getY();
            pageinfo(x,y);
            break;
        case MotionEvent.ACTION_UP:
            x=me.getX();
            y= me.getY();
            pageinfo(x,y);
            break;
        case MotionEvent.ACTION_OUTSIDE:
            x=me.getX();
            y= me.getY();
            pageinfo(x,y);
            break;
        default: return true;
        }
        return false;
    }
    public void pageinfo(float x, float y) {
        // TODO Auto-generated method stub

         if(rid==R.drawable.cell){
                image  = BitmapFactory.decodeResource(getResources(), rid);
                pixel = image.getPixel((int)x,(int)y);
                k.setText(Integer.toString(pixel));

                }
}
4

1 に答える 1

1

あなたのメンバーは;であるNullPointerExceptionため、を取得しています。knull

拡張として宣言および使用され、 which returns backImageViewを使用して初期化されます。親内から同じコード ( ) を使用すると、目的のインスタンスが返されます。findViewByIdnullfindViewByIdActivityTextView

クラスkからメンバーを削除する必要があります。イベントで値を取得したら、それをに渡します。他の GUI を処理させます。FirstImagepixelonTouchActivity

したがって、次のように変更FirstImageします。

pixel = image.getPixel((int)x,(int)y);
((AshActivity) getContext()).writePixelIntoK(pixel);

writePixelIntoKメインアクティビティ内にメソッドを実装します。たとえば、次のようになります。

public void writePixelIntoK(int pixel)
{
    k.setText("pixel touched: " + pixel);
}
于 2012-05-24T10:59:23.397 に答える