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

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

概述我一直在学习 Android大约两个星期(专家在as2 / 3). 我创建了一个简单的LinearLayout1,它包含一个包含一个乙烯基记录的png(一个圆形光盘基本上) 当用户拖动手指时,我已经设置了这个ImageView来旋转,就像抓拍一样. 我的代码似乎正在工作(不知道它的最佳方式,但它的作品).问题是当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 – 用手指旋转ImageView可以移动其他视图全部内容,希望文章能够帮你解决Android – 用手指旋转ImageView可以移动其他视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存