ImageView wird in RelativeLayout nicht angezeigt

  • Ich habe Probleme, eine ImageView (dbm_needle) zu erstellen, die ich mit dem folgenden Code nach einem Tastendruck drehen möchte, und wird im RelativeLayout korrekt angezeigt. Der Inhalt scheint richtig gezeichnet zu sein, aber der Knopfdruck scheint nicht das onTouch-Ereignis auszulösen, durch das die Nadel gedreht wird, und ich kann nicht herausfinden, was falsch ist.

    counter.xml:

     <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/dblmeter_screen" 
    android:gravity="center_horizontal">
     

    Java-Aktivität: < / strong>

     public class Counter extends Activity {
    
    private boolean keepRotating = false;
    private boolean returnRotating = true;
    private Random mRnd = new Random();
    private static final int INTERVAL = 25;
    int degrees =-65;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.counter);
    }
    
    public void make(float x){
        RelativeLayout relLayout = (RelativeLayout) findViewById(R.id.dblmeter_screen) ;
    
        Bitmap rotate_needle = BitmapFactory.decodeResource(getResources(), R.drawable.dbm_needle);
    
        int width = rotate_needle.getWidth();
        int height = rotate_needle.getHeight();
        int newWidth = 6;
        int newHeight = 400;
    
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
    
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);
        matrix.postRotate(x);
    
        Bitmap resizedBitmap = Bitmap.createBitmap(rotate_needle, 0, 0,
                          width, height, matrix, true);
    
        BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
    
        ImageView imageView = new ImageView(this);
    
        imageView.setImageDrawable(bmd);
    
        imageView.setScaleType(ScaleType.CENTER);
    
        setContentView(relLayout);
    }
    
    public void make(int degrees)
    {
        Log.i(this.getClass().toString(), "Rotation : " + degrees);
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        switch (event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                startRotating();
                break;
            case MotionEvent.ACTION_UP:
                stopRotating();
                break;
        }
    
        return super.onTouchEvent(event);
    }
    
    public void startRotating()
    {
        returnRotating = false;
        if (!keepRotating)
        {
            keepRotating = true;
    
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable()
            {
                @Override
                public void run()
                {
                    if (keepRotating)
                    {
                        int Rand = mRnd.nextInt(30);
                        degrees = (degrees + (Rand/2)-Rand/6) % 360;
                        if(degrees > 65)
                            degrees = degrees - Rand;
                        make(degrees);
    
                        handler.postDelayed(this, INTERVAL);
                    }
                }
            }, INTERVAL);
        }
    }
    
    public void stopRotating()
    {
        keepRotating = false;
        if (!returnRotating)
        {
            returnRotating = true;
    
            final Handler handler = new Handler();
    
            handler.postDelayed(new Runnable()
            {
                @Override
                public void run()
                {
                    if (returnRotating)
                    {
                        int Rand = mRnd.nextInt(30);
                        degrees = (degrees - (Rand/2)+Rand/6) % 360;
                        if(degrees < -65)
                            degrees = degrees + Rand;
                        make(degrees);
    
                        handler.postDelayed(this, INTERVAL);
                    }
                }
            }, INTERVAL);
        }
    }
    
    public void pushClick(View pushClick) {
        switch (pushClick.getId()) {
        case R.id.btn_push:
            make(degrees);
            }
    
        }
     
    28 April 2012
    n00bdev
1 answer
  • Der Stack-Trace scheint einen internen Fehler zu zeigen. Manchmal kann die Eklipse die Dinge ohne Grund vermasseln. Reinigen Sie das Projekt oder starten Sie Eclipse oder AdB neu. Das könnte Ihr Problem beheben.

    Dann sollten Sie meiner Ansicht nach Layout-Parameter zu der Bildansicht hinzufügen, die wie

     imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT
            ,LayoutParams.WRAP_CONTENT));
      
    
                                        
    22 November 2011
    blessenm