Я изучаю Android уже около двух недель (эксперт в as2 / 3).
Я создал простой LinearLayout1, which contains an
ImageView`, содержащий png виниловой пластинки (в основном только круглый диск)
Я настроил этот ImageView
так, чтобы он вращался, когда пользователь тащит по нему палец, как поцарапать запись.
Кажется, мой код работает (не уверен, что это лучший способ, но он работает). Проблема в том, что когда ImageView
поворачивается, это заставляет другие взгляды вращаться вокруг. Я решил, что это потому, что мое круглое изображение действительно квадрат с прозрачными углами. Именно эти углы подталкивают другие виды и заставляют запись отталкиваться от левой стороны экрана, если у меня есть ImageView
выравнивание по левому краю.
Есть несколько попыток решить эту проблему онлайн, но ни одна из них, кажется, не совсем то, что мне нужно, и некоторые из них обернуты в примеры, настолько надежные, что я не могу понять, что из этого извлечь на моем начальном уровне.
Если бы кто-нибудь мог пролить свет на то, что я могу сделать, то решите это, было бы здорово. Я понимаю, что простого ответа может не существовать, но имейте в виду, что я нуб Java и держу его настолько простым, насколько вы можете! Заранее большое спасибо за любую помощь!
также, если кто-нибудь может сказать мне, почему мне нужно вычесть 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);
}
}
EDIT
Оказывается, это раздражающая проблема. Должен быть способ поворота изображения, которое является большим или большим, чем экран, без масштабирования, чтобы все изображение оставалось на экране. Почему часть вращающегося изображения не может исчезнуть с экрана? Очень расстраивает. Я попытался обернуть ImageView в FrameView , что частично помогло. Теперь я могу добавить другие виды, которые не будут затронуты, но у меня все еще не может быть достаточно большой диск, потому что при вращении ему не разрешается выходить за границы экрана. Я не понимаю почему. Я еще не проверил расширение ImageView . Любые другие мысли все равно будут оценены!