`
berdy
  • 浏览: 513647 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

扩展ImageView使可旋转

阅读更多
继承ImageView,增加angle属性,重写OnMeasure和OnDraw方法
package com.upon.common.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.ImageView;

import com.upon.xxxx.R;

public class UponRotateImageView extends ImageView {

	private int mAngle;

	public UponRotateImageView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		loadAttributes(context, attrs);
	}

	public UponRotateImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		loadAttributes(context, attrs);
	}

	public UponRotateImageView(Context context) {
		super(context);
	}

	private void loadAttributes(Context context, AttributeSet attrs) {
		TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.RotateImageView);
		mAngle = arr.getInteger(R.styleable.RotateImageView_angle, 0);
		arr.recycle();
	}

	public int getAngle() {
		return mAngle;
	}

	public void setAngle(int angle) {
		mAngle = angle;
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int w = getDrawable().getIntrinsicWidth();
		int h = getDrawable().getIntrinsicHeight();
		double a = Math.toRadians(mAngle);

		int width = (int) (Math.abs(w * Math.cos(a)) + Math.abs(h * Math.sin(a)));
		int height = (int) (Math.abs(w * Math.sin(a)) + Math.abs(h * Math.cos(a)));

		setMeasuredDimension(width, height);
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		canvas.save();
		canvas.rotate(mAngle % 360, getWidth() / 2, getHeight() / 2);
		getDrawable().draw(canvas);
		canvas.restore();
	}
}

attrs.xm文件中增加angle属性

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="RotateImageView">
        <attr name="angle" format="integer" />
    </declare-styleable>

</resources>


使用UponRotateImageView
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:upon="http://schemas.android.com/apk/res/com.upon.xxxx"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <com.upon.common.view.UponRotateImageView
        android:id="@+id/bkg_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/conquer_nation_bkg"
        upon:angle="45" />

</RelativeLayout>
0
0
分享到:
评论
2 楼 day5678 2013-12-27  
天秤丶 写道
麻烦问一下。。那个upon:angle不管用啊。。。


那你就在JAVA代码中设值呗。
1 楼 天秤丶 2013-11-08  
麻烦问一下。。那个upon:angle不管用啊。。。

相关推荐

    可手势缩放平移及旋转的ImageView

    本项目就是这样一个例子,名为"可手势缩放平移及旋转的ImageView",它扩展了标准的`ImageView`,增加了对手势操作的支持。 首先,我们来看一下这个自定义的`ImageView`是如何处理手势的。手势识别在Android中主要...

    可以旋转的ImageView

    从标签 "可以 旋转的 ImageView" 我们可以推测,这个自定义组件主要关注两个特性:一是可旋转,二是与标准 `ImageView` 兼容。这意味着它应该能像普通 `ImageView` 一样加载图片,同时提供了额外的旋转控制功能。 ...

    可旋转的ImageView

    标题“可旋转的ImageView”提示我们这里涉及的是一个自定义的ImageView实现,它具有根据设备屏幕方向自动调整图像旋转角度的功能,这在创建相机应用或者处理拍摄的照片时尤其有用。描述中提到的“三种形式”可能是指...

    Android 自定义ImageView(移动、缩放、旋转)

    本文将深入探讨如何自定义一个名为`MutiTouchImageView`的ImageView,它支持手势操作,包括移动、缩放和旋转图像。这对于创建交互式的应用界面,如图片查看器或编辑器等场景非常有用。 首先,我们需要继承`...

    可放大缩小的ImageView

    为了实现类似Instagram那样可以放大缩小图片的效果,开发者通常会使用扩展了`ImageView`功能的库,如`ImageViewTouch`。这个库提供了对图片的平移、缩放、旋转等手势操作的支持,极大地提升了用户体验。 `...

    android 自定义imageview(手势放大,缩小,旋转)

    - 使用`setImageMatrix()`方法将更新后的Matrix设置回ImageView,以使图像的变化生效。 5. **优化与注意事项** - 为了避免图像在缩放和平移过程中出现抖动,可以使用`setScaleType()`方法设置ImageView的缩放类型...

    Android代码-ImageView控件缩放和旋转图片源码.zip

    - **自定义ImageView**:可能这个压缩包里包含了一个自定义的`ImageView`子类,扩展了默认的`ImageView`功能,添加了缩放和旋转的逻辑。 - **处理触摸事件**:在`onTouchEvent()`方法中处理触摸事件,识别出缩放和...

    MaterialImageView-可设置阴影 、圆角的ImageView .zip

    项目地址:https://github.com/zhaozhentao/MaterialImageView 效果图:如何使用:由于MaterialImageView是扩展了ImageView,支持ImageView的所有特性。  android:src="@drawable/pic1"  android:layout_width=...

    05_01_01_ImageView.zip_imageview

    - `android:adjustViewBounds`:若设为true,可使ImageView的边界根据图片内容调整。 二、动态添加图片 在描述中提到的功能是点击按钮后添加图片,这需要结合Button和代码实现。 1. 在XML布局中添加Button: ```...

    手势缩放的ImageView

    在"ZoomImageDemo"项目中,开发者可能已经对标准的ImageView进行了扩展,创建了一个自定义的可缩放ImageView类。这个类可能会继承自ImageView,并重写onTouchEvent()方法,以便处理触摸事件。在onTouchEvent()中,...

    android 可放大缩小拖动的ImageView

    `MatrixImageView`类继承自`AppCompatImageView`,这意味着它不仅具备原生`ImageView`的所有功能,还能兼容更多的Android版本。在构造函数中,通过调用`setOnTouchListener`方法,为当前`MatrixImageView`设置了一个...

    RotateCircleView:适用于Android的可旋转圆形ImageView

    【RotateCircleView:适用于Android的可旋转圆形ImageView】 在Android应用开发中,视觉效果和用户体验是至关重要的元素。为了提供独特且吸引人的交互体验,开发者经常需要创建自定义的UI组件。`RotateCircleView`...

    gesture-imageview.zip

    同时,可能还需要处理手势冲突,例如当ImageView与其他可交互的组件一同使用时,需要适当地处理各自的手势事件。 以上就是关于"gesture-imageview.zip"可能涉及的一些关键知识点,它们涵盖了Android自定义View开发...

    自定义缩放ImageView

    这时,自定义一个可缩放的ImageView就显得尤为重要。这个自定义的组件通常被称为“自定义缩放ImageView”。 自定义缩放ImageView的核心功能在于实现图片的平移、缩放和旋转,以提供用户更加灵活的操作体验。在...

    自定义ImageView

    此外,我们还可以扩展`ImageView`的功能,例如添加手势识别。通过重写`onTouchEvent(MotionEvent event)`,我们可以监听用户的触摸事件: ```java @Override public boolean onTouchEvent(MotionEvent event) { ...

    Android-一个大图预览(支持缩放)ImageView

    在Android中,`View`和`ImageView`通常只能显示单一的图像,但为了实现缩放功能,`ZoomImageView`可能需要在内部使用`Matrix`来管理图片的绘制。`Matrix`可以进行平移、旋转和缩放等变换操作,确保图像在屏幕上正确...

    swift-ZoomImageView扩展缩放图片的UI组件库

    Swift-ZoomImageView是一个针对iOS平台的UI组件库,专门用于扩展和优化图片的显示与缩放功能。这个组件的设计灵感来源于Apple的内置照片应用,它提供了类似的照片查看体验,允许用户轻松地放大和缩小图片,同时保持...

    Android-在滚动的androidImageView上创建视差和任何其他转换效果

    开发者Abdul Rais可能已经封装了一个名为`ParallaxImageView`的类,它扩展了Android的`ImageView`并添加了视差滚动的功能。我们可以通过继承这个自定义View,并在滚动事件中调整背景图像的位置来实现视差效果。 在...

    Android自定义GestureDetector实现手势ImageView

    Android自定义GestureDetector实现手势ImageView Android平台提供了GestureDetector类来检测用户的手势操作,但是在实际开发中,...自定义GestureDetector可以满足我们特定的需求,并且提供了更好的灵活性和可扩展性。

    一个好的架构附带ImageView手势缩放和下载图片

    一个好的架构应该具备清晰的职责划分、模块解耦、可测试性和可扩展性。例如,MVVM架构可以将业务逻辑和UI解耦,提高代码的可维护性。 2. **ImageView**: ImageView是Android SDK中用于显示图像的组件,通常用于...

Global site tag (gtag.js) - Google Analytics