Android – 用手指旋转ImageView可以移动其他视图

前端之家收集整理的这篇文章主要介绍了Android – 用手指旋转ImageView可以移动其他视图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在学习 Android大约两个星期(专家在as2 / 3).

我创建了一个简单的LinearLayout1,它包含一个包含一个乙烯基记录的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,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
        turntable.setImageBitmap(redrawnBitmap);
    }
}

编辑

这是一个令人烦恼的问题.必须有一种方法来旋转比屏幕大或大的图像,而不会缩放图像,使整个图像保持在屏幕上.为什么旋转图像的一部分不能离开屏幕?很沮丧我试图将ImageView包装到FrameView中,这部分有助于.现在我可以添加不会受到影响的其他视图,但是我仍然无法使光盘足够大,因为它不允许在旋转时传递屏幕边框.我不明白为什么我还没有签出扩展ImageView.任何其他想法仍将不胜感激!

解决方法

其实这是因为你尝试以线性布局旋转视图.这将导致其专用空间扩大或缩小.

想法1:尝试使用框架布局,您的视图在里面旋转想法2:尝试自定义视图子类,并在onDraw中绘制您的转盘.在互联网上寻找一个罗盘绘制示例开始.

猜你在找的Android相关文章