Мое изображение больше, но на экране должна отображаться только его часть. Я сделал это. Моя проблема в том, что изображение нужно вращать пальцем. Приведенный ниже код работает так, как должен, на маленьком изображении. Но на моем изображении он ведет себя неправильно, перемещая изображение вверх и вниз и странно поворачивая его. Как заставить мое изображение нормально вращаться?, как маленькое изображение. Тогда я должен быть в состоянии получить цвет коснулся. Я получаю ответ здесь, но мне еще нужно над этим поработать. Но сначала подскажите, пожалуйста, как мне решить проблему с вращением, и если у вас есть идеи по поводу второго вопроса, касания цвета, хотелось бы их услышать.
это изображение:
вот как это должно выглядеть на экране:
Макет XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView android:id="@+id/imag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/roata"
android:layout_alignParentBottom="true"
android:layout_marginBottom="-200dp"
android:scaleType="center"/>
</RelativeLayout>
Код Java:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
picture = (ImageView)findViewById(R.id.imag);
picture.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() - picture.getWidth() / 2, picture.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.roata);
Matrix matrix = new Matrix();
matrix.postRotate(newRot - 50);
Bitmap redrawnBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
picture.setImageBitmap(redrawnBitmap);
}
ОБНОВЛЕНИЕ: Поскольку я ничего не добился с Bitmap
и Matrix
, я попытался настроить RotateAnimtaion()
, чтобы получить что-то максимально похожее. Я думаю, изменив второй параметр и продолжительность анимации, мы можем получить аналогичный результат, не меняя положение Y. Теперь проблема в том, что изображение кропится, думаю из-за scaleType="center"
. Вышлю код и скрин. Можно ли это улучшить?
Animation a = new RotateAnimation(0.0f, param,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
a.setFillEnabled(true);
a.setFillAfter(true);
a.setDuration(param);
picture.startAnimation(a);
scaleType=fitXY
растягивает изображение, и я этого не хочу, но я все равно пробовал, и у меня такое же поведение - person AlexAndro   schedule 02.07.2012