我创建了一个简单的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可以移动其他视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)