继承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>
分享到:
相关推荐
本项目就是这样一个例子,名为"可手势缩放平移及旋转的ImageView",它扩展了标准的`ImageView`,增加了对手势操作的支持。 首先,我们来看一下这个自定义的`ImageView`是如何处理手势的。手势识别在Android中主要...
从标签 "可以 旋转的 ImageView" 我们可以推测,这个自定义组件主要关注两个特性:一是可旋转,二是与标准 `ImageView` 兼容。这意味着它应该能像普通 `ImageView` 一样加载图片,同时提供了额外的旋转控制功能。 ...
标题“可旋转的ImageView”提示我们这里涉及的是一个自定义的ImageView实现,它具有根据设备屏幕方向自动调整图像旋转角度的功能,这在创建相机应用或者处理拍摄的照片时尤其有用。描述中提到的“三种形式”可能是指...
本文将深入探讨如何自定义一个名为`MutiTouchImageView`的ImageView,它支持手势操作,包括移动、缩放和旋转图像。这对于创建交互式的应用界面,如图片查看器或编辑器等场景非常有用。 首先,我们需要继承`...
为了实现类似Instagram那样可以放大缩小图片的效果,开发者通常会使用扩展了`ImageView`功能的库,如`ImageViewTouch`。这个库提供了对图片的平移、缩放、旋转等手势操作的支持,极大地提升了用户体验。 `...
- 使用`setImageMatrix()`方法将更新后的Matrix设置回ImageView,以使图像的变化生效。 5. **优化与注意事项** - 为了避免图像在缩放和平移过程中出现抖动,可以使用`setScaleType()`方法设置ImageView的缩放类型...
- **自定义ImageView**:可能这个压缩包里包含了一个自定义的`ImageView`子类,扩展了默认的`ImageView`功能,添加了缩放和旋转的逻辑。 - **处理触摸事件**:在`onTouchEvent()`方法中处理触摸事件,识别出缩放和...
项目地址:https://github.com/zhaozhentao/MaterialImageView 效果图:如何使用:由于MaterialImageView是扩展了ImageView,支持ImageView的所有特性。 android:src="@drawable/pic1" android:layout_width=...
- `android:adjustViewBounds`:若设为true,可使ImageView的边界根据图片内容调整。 二、动态添加图片 在描述中提到的功能是点击按钮后添加图片,这需要结合Button和代码实现。 1. 在XML布局中添加Button: ```...
在"ZoomImageDemo"项目中,开发者可能已经对标准的ImageView进行了扩展,创建了一个自定义的可缩放ImageView类。这个类可能会继承自ImageView,并重写onTouchEvent()方法,以便处理触摸事件。在onTouchEvent()中,...
`MatrixImageView`类继承自`AppCompatImageView`,这意味着它不仅具备原生`ImageView`的所有功能,还能兼容更多的Android版本。在构造函数中,通过调用`setOnTouchListener`方法,为当前`MatrixImageView`设置了一个...
【RotateCircleView:适用于Android的可旋转圆形ImageView】 在Android应用开发中,视觉效果和用户体验是至关重要的元素。为了提供独特且吸引人的交互体验,开发者经常需要创建自定义的UI组件。`RotateCircleView`...
同时,可能还需要处理手势冲突,例如当ImageView与其他可交互的组件一同使用时,需要适当地处理各自的手势事件。 以上就是关于"gesture-imageview.zip"可能涉及的一些关键知识点,它们涵盖了Android自定义View开发...
这时,自定义一个可缩放的ImageView就显得尤为重要。这个自定义的组件通常被称为“自定义缩放ImageView”。 自定义缩放ImageView的核心功能在于实现图片的平移、缩放和旋转,以提供用户更加灵活的操作体验。在...
此外,我们还可以扩展`ImageView`的功能,例如添加手势识别。通过重写`onTouchEvent(MotionEvent event)`,我们可以监听用户的触摸事件: ```java @Override public boolean onTouchEvent(MotionEvent event) { ...
在Android中,`View`和`ImageView`通常只能显示单一的图像,但为了实现缩放功能,`ZoomImageView`可能需要在内部使用`Matrix`来管理图片的绘制。`Matrix`可以进行平移、旋转和缩放等变换操作,确保图像在屏幕上正确...
Swift-ZoomImageView是一个针对iOS平台的UI组件库,专门用于扩展和优化图片的显示与缩放功能。这个组件的设计灵感来源于Apple的内置照片应用,它提供了类似的照片查看体验,允许用户轻松地放大和缩小图片,同时保持...
开发者Abdul Rais可能已经封装了一个名为`ParallaxImageView`的类,它扩展了Android的`ImageView`并添加了视差滚动的功能。我们可以通过继承这个自定义View,并在滚动事件中调整背景图像的位置来实现视差效果。 在...
Android自定义GestureDetector实现手势ImageView Android平台提供了GestureDetector类来检测用户的手势操作,但是在实际开发中,...自定义GestureDetector可以满足我们特定的需求,并且提供了更好的灵活性和可扩展性。
一个好的架构应该具备清晰的职责划分、模块解耦、可测试性和可扩展性。例如,MVVM架构可以将业务逻辑和UI解耦,提高代码的可维护性。 2. **ImageView**: ImageView是Android SDK中用于显示图像的组件,通常用于...