Я изучаю Android уже около двух недель (эксперт по as2/3).
Я создал простой LinearLayout1, which contains an
ImageView`, содержащий png виниловой записи (в основном круглый диск)
Я установил этот ImageView
для поворота, когда пользователь тащит на него палец, например, царапает запись.
Мой код, кажется, работает (не уверен, что это лучший способ, но он работает). Проблема в том, что при повороте ImageView
он перемещает другие виды вокруг. Я решил, что это потому, что мой круглый образ - это квадрат с прозрачными углами. Именно эти углы подталкивают другие взгляды и заставляют запись отходить от левой стороны экрана, если у меня есть ImageView
.
Есть несколько попыток решить эту проблему онлайн, но ни один из них, похоже, не совсем то, что мне нужно, и некоторые из них обернуты примерами, настолько надежными, что я не могу различить, что взять с него на начальном уровне.
Если кто-то может пролить свет на то, что я могу сделать, решите это, это будет здорово. Я понимаю, что простой ответ может не существовать, но имейте в виду, что я Java noob и сохраняю его как можно проще! Большое спасибо за любую помощь!
также, если кто-нибудь скажет мне, почему мне нужно вычесть 50 из вращения, чтобы сделать запись движением в точном месте, которое коснется пользователь, это тоже было бы полезно! см. это в методе updateRotation().
Вот моя разметка xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/baseView"
android:background="#FFFFFFFF"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/turntable"
android:src="@drawable/turntable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
и вот мой код Java:
package com.codingfiend.android.turntable;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;
public class Turntable extends Activity
{
View baseView;
ImageView turntable;
TextView bottomText;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
baseView = (View)findViewById(R.id.baseView);
turntable = (ImageView)findViewById(R.id.turntable);
turntable.setOnTouchListener(onTableTouched);
}
public android.view.View.OnTouchListener onTableTouched = new android.view.View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent evt)
{
double r = Math.atan2(evt.getX() - turntable.getWidth() / 2, turntable.getHeight() / 2 - evt.getY());
int rotation = (int) Math.toDegrees(r);
if (evt.getAction() == MotionEvent.ACTION_DOWN)
{
//
}
if (evt.getAction() == MotionEvent.ACTION_MOVE)
{
updateRotation(rotation);
}
if (evt.getAction() == MotionEvent.ACTION_UP)
{
//
}
return true;
}
};
private void updateRotation(double rot)
{
float newRot = new Float(rot);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.turntable);
Matrix matrix = new Matrix();
matrix.postRotate(newRot - 50);
Bitmap redrawnBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
turntable.setImageBitmap(redrawnBitmap);
}
}
ИЗМЕНИТЬ
Это оказывается раздражающей проблемой. Должен быть способ повернуть изображение, которое является таким же большим или большим, чем экран без его масштабирования, поэтому весь образ остается на экране. Почему часть вращающегося изображения не может покинуть экран? Очень расстраивает. Я попробовал обернуть ImageView в FrameView, что частично помогло. Теперь я могу добавить другие представления, которые не будут затронуты, но я все еще не могу иметь свой диск достаточно большим, потому что ему не разрешается пропускать границы экрана при его повороте. Я не понимаю почему. Я еще не проверил расширение ImageView. Любые другие мысли по-прежнему будут оценены!