ImageView не отображается в RelativeLayout - PullRequest
0 голосов
/ 22 ноября 2011

У меня проблемы с созданием ImageView (dbm_needle), который я хотел бы повернуть с использованием приведенного ниже кода после нажатия кнопки, чтобы он отображался правильно в RelativeLayout. Кажется, что содержимое отображается правильно для запуска, но нажатие кнопки, похоже, не запускает событие onTouch, которое заставляет стрелку вращаться, и я не могу понять, что не так.

counter.xml:

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

Java Activity:

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);
        }

    }

1 Ответ

1 голос
/ 22 ноября 2011

Трассировка стека, кажется, показывает внутреннюю ошибку. Иногда затмение может напортачить без причины. Попробуйте очистить проект или перезапустить затмение или перезапустить adb. Это может решить вашу проблему.

Тогда я думаю, что вы должны добавить параметры макета к изображению, созданному как

imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT
        ,LayoutParams.WRAP_CONTENT));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...