⑴ android中我在一个RelativeLayout中放入了一个ImageView,我的Imageview自定义之可以拖动,也就是可以在这
这个问题是给imageView设置了background后会调用它的onLayout函数使得imageView在relativeLayout里面重新布局引起的。没什么特别的办法,在设置背景之前保存layout的四个参数,设置背景之后再调用一次layout吧~
⑵ android中的imageview怎么设置上下左右的滑动事件
private float mPosX; private float mPosY; private float mCurrentPosX; private float mCurrentPosY; private ImageView imageview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageview = (ImageView) findViewById(R.id.imageview); imageview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { // 按下 case MotionEvent.ACTION_DOWN: mPosX = event.getX(); mPosY = event.getY(); break; // 移动 case MotionEvent.ACTION_MOVE: mCurrentPosX = event.getX(); mCurrentPosY = event.getY(); if (mCurrentPosX - mPosX > 0 && Math.abs(mCurrentPosY - mPosY) < 10) Log.e("", "向右"); else if (mCurrentPosX - mPosX < 0 && Math.abs(mCurrentPosY - mPosY) < 10) Log.e("", "向左"); else if (mCurrentPosY - mPosY > 0 && Math.abs(mCurrentPosX - mPosX) < 10) Log.e("", "向下"); else if (mCurrentPosY - mPosY < 0 && Math.abs(mCurrentPosX - mPosX) < 10) Log.e("", "向上"); break; // 拿起 case MotionEvent.ACTION_UP: break; default: break; } return true; } }); }
⑶ 在安卓开发中,有两个可拖动的ImageView控件,当拖动产生重叠时,详情在补充里
没遇到过这种问题 , 试试隐藏A再显示A 或者获取到A的位置新建一个ImageView
⑷ 关于android中将imageview通过手势进行上下移动的问题
跪求加好友!!晚上一起研究!!qq1009186231
⑸ andriod开发,我在layout中拖入了一个ImageView,怎么直接在定义里面控制它的大小
这个你可以把iamgeview放到一个绝对布局里面,定义该布局的大小,然后让imageview的大小直接这样设置:android:layout_width="wrap_content"
android:layout_height="wrap_content"
⑹ android的draglistview怎么嫱献旰蟮膗i
一些应用在拖动一个列表项时会浮现一个小图片用于代表当前拖动的列表项
核心代码如下。
//自定义ListView,准备改造成自己想要的ListView
//这样的好处是我们不仅可以直接使用ListView很多现成的稳定的方法,而且可以重写方法改写ListView的行为(利用的是java面向对象的继承特性,本人喜欢在任何代码中分析面向对象的特性、原则和模式)
public class DragListView extends ListView {
private static final String TAG = DragListView.class.getSimpleName();
/**
* 被拖拽项的影像,其实就是一个ImageView
* */
private ImageView dragImageView;
private int dragPointX;//手指拖动的位置坐标
private int dragPointY;
private int dragOffsetX;//拖动影像与手指拖动位置的偏移
private int dragOffsetY;
private int dragDownX;//手指开始拖拽的起始点x坐标
private WindowManager windowManager;// windows窗口控制类
private WindowManager.LayoutParams windowParams;// 用于控制拖拽项的显示的参数
private DragListener mDragListener;
public DragListView(Context context, AttributeSet attrs) {
super(context, attrs);
setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView parent, View v,
int position, long id) {
Log.e(TAG, "onItemLongClick");
// 设置Drawingcache为true,获得选中项的影像bm,就是后面我们拖动的哪个头像
v.setDrawingCacheEnabled(true);
Bitmap bm = Bitmap.createBitmap(v.getDrawingCache());
startDrag(bm);
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// 捕获down事件
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
int x = (int) ev.getX();
int y = (int) ev.getY();
// 如果是无效位置(超出边界,分割线等位置),返回
if (getCount() < 1) {
return super.onInterceptTouchEvent(ev);
}
if (mDragListener != null) {
mDragListener.down(x, y);
}
ViewGroup itemView = (ViewGroup) getChildAt(0);
if (itemView != null) {
dragPointY = (int) (ev.getRawY() - (itemView.getHeight() / 2));
dragOffsetY = (itemView.getHeight() / 2);
dragOffsetX = (int) (itemView.getWidth() / 2);
dragPointX = x + dragOffsetX;
dragDownX = x;
}
return false;
}
return super.onInterceptTouchEvent(ev);
}
/**
*
* 准备拖动,初始化拖动项的图像
*
* @param bm
*
* @param y
*/
public void startDrag(Bitmap bm) {
// 释放影像,在准备影像的时候,防止影像没释放,每次都执行一下
stopDrag();
windowParams = new WindowManager.LayoutParams();
// 从上到下计算y方向上的相对位置,
windowParams.gravity = Gravity.TOP | Gravity.LEFT;
windowParams.x = dragPointX;
windowParams.y = dragPointY;
windowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
LogEx.i(TAG, "x:-->" + windowParams.x + " y: " + windowParams.y);
// 下面这些参数能够帮助准确定位到选中项点击位置,照抄即可
windowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
windowParams.format = PixelFormat.TRANSLUCENT;
windowParams.windowAnimations = 0;
// 把影像ImagView添加到当前视图中
ImageView imageView = new ImageView(getContext());
imageView.setImageBitmap(bm);
windowManager = (WindowManager) getContext().getSystemService("window");
windowManager.addView(imageView, windowParams);
// 把影像ImageView引用到变量drawImageView,用于后续操作(拖动,释放等等)
dragImageView = imageView;
}
/**
*
* 停止拖动,去除拖动项的头像
*/
public void stopDrag() {
if (dragImageView != null) {
dragPointX = 0;
dragOffsetX = 0;
windowManager.removeView(dragImageView);
dragImageView = null;
}
}
过客/ty 20:41:41
/**
*
* 触摸事件
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
// LogEx.v(TAG, "x: " + ev.getX() + " y: " + ev.getY());
// 如果dragmageView为空,说明拦截事件中已经判定仅仅是点击,不是拖动,返回
// 如果点击的是无效位置,返回,需要重新判断
if (dragImageView != null) {
int action = ev.getAction();
int moveY = (int) ev.getY();
int moveX = (int) ev.getX();
switch (action) {
case MotionEvent.ACTION_UP:
// 释放拖动影像
stopDrag();
// 放下后,判断位置,实现相应的位置删除和插入
onDrop(moveX, moveY);
break;
case MotionEvent.ACTION_MOVE:
dragPointY = (int) ev.getRawY() - dragOffsetY;
dragPointX = (int) moveX + dragOffsetX;
// 拖动影像
onDrag(moveY, moveX);
break;
default:
break;
}
return true;
}
// 这个返回值能够实现selected的选中效果,如果返回true则无选中效果
return super.onTouchEvent(ev);
}
/**
*
* 拖动执行,在Move方法中执行
*
* @param y
*/
public void onDrag(int moveY, int moveX) {
if (dragImageView != null) {
windowParams.alpha = 0.8f;
windowParams.y = dragPointY;
windowParams.x = dragPointX;
windowManager.updateViewLayout(dragImageView, windowParams);
}
if (mDragListener != null) {
mDragListener.move(dragPointX, moveY);
}
}
/**
*
* 拖动放下的时候
*
* @param y
*/
public void onDrop(int x, int y) {
if (mDragListener != null) {
if (x < dragDownX - 30) {
mDragListener.drop(dragPointX, y);
} else {
mDragListener.removeBg();
}
}
}
public void setPointView(DragListener dragListener) {
this.mDragListener = dragListener;
}
public interface DragListener {
void down(int x, int y);
void drop(int x, int y);
void move(int x, int y);
void removeBg();
}
}
⑺ Android ImageView启动TranslateAnimation之后,如何得到移动过程中的位置。
我也没学多久,你说的这种情况我认为用Handler、Runnable处理会有效果
///////////////////////////////////////////////////////
你试试下面的代码,我测试过,可行,xml布局文件就是一个absolutelayout,里面一个imageview,自己写
一个注释都没有,坏习惯,你自己看吧,呵呵~~~
package com.tianlv.study.temp;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
public class temp extends Activity {
private Handler mHandler = new Handler();
private Runnable mMoveImage = new Runnable(){
public void run() {
moveImage();
}
};
private ImageView iView;
private int downMouseY;
private AbsoluteLayout.LayoutParams downImagePms;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iView = (ImageView) findViewById(R.id.ImageView01);
iView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View view, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
Log.i("debug", "stop");
downMouseY = (int) event.getRawY();
downImagePms = (AbsoluteLayout.LayoutParams) iView.getLayoutParams();
mHandler.removeCallbacks(mMoveImage);
}
if(event.getAction() == MotionEvent.ACTION_UP){
Log.i("debug", "move");
mHandler.postDelayed(mMoveImage, 500);
}
if(event.getAction() == MotionEvent.ACTION_MOVE){
dragImage((int) event.getRawY()- downMouseY);
}
return true;
}
});
}
private void moveImage(){
AbsoluteLayout.LayoutParams oldLayPms = (AbsoluteLayout.LayoutParams) iView.getLayoutParams();
AbsoluteLayout.LayoutParams newLayPms = new AbsoluteLayout.LayoutParams(oldLayPms.width, oldLayPms.height, oldLayPms.x, oldLayPms.y+1);
iView.setLayoutParams(newLayPms);
mHandler.removeCallbacks(mMoveImage);
if(newLayPms.y < 300){
mHandler.postDelayed(mMoveImage, 500);
}
}
private void dragImage(int y){
AbsoluteLayout.LayoutParams newLayPms = new AbsoluteLayout.LayoutParams(downImagePms.width, downImagePms.height, downImagePms.x, downImagePms.y+y);
iView.setLayoutParams(newLayPms);
}
}
⑻ android 拖动imageview 如果没有拖动到指定的位置 返回到起点怎么实现
点击imageview,加一个边框,再点击,取消边框。拖动imageview,可以停在移动结束之后的位置上,而不是弹回移动之前的位置。
请问有什么好的实现办法。
public class MainActivity extends Activity {
private int screenWidth;
private int screenHeight;
private ImageView bgview;
private ImageView photoview;
private TextView txtview;
int top, right, bottom, left;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DisplayMetrics dm = getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels - 50;
bgview = (ImageView) findViewById(R.id.bgview);
photoview = (ImageView) findViewById(R.id.photoview);
photoview.setOnTouchListener(new TouchHandler());
photoview.setOnClickListener(new ClickHandler());
}
class TouchHandler implements OnTouchListener{
int lastX , lastY, dx, dy;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
// if(mode == NONE)
// if(dx < 2 && dy < 2)
{
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
}
break;
case MotionEvent.ACTION_MOVE:
dx = (int) event.getRawX() - lastX;
dy = (int) event.getRawY() - lastY;
// if(mode == DRAG)
{
// photoview.setBackgroundResource(R.drawable.img_border);
left = v.getLeft() + dx;
top = v.getTop() + dy;
right = v.getRight() + dx;
bottom = v.getBottom() + dy;
if(left < 0)
{
left = 0;
right = left + v.getWidth();
}
if(right > screenWidth)
{
right = screenWidth;
left = right - v.getWidth();
}
if(top < 0)
{
top = 0;
bottom = top + v.getHeight();
}
if(bottom > screenHeight)
{
bottom = screenHeight;
top = bottom - v.getHeight();
}
v.layout(left, top, right, bottom);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
}
break;
case MotionEvent.ACTION_UP:
break;
}
if(dx < 2 && dy < 2)
{
return false;
}
return true;
}
}
class ClickHandler implements OnClickListener{
@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.photoview:
if( null == photoview.getBackground())
{
photoview.setBackgroundResource(R.drawable.img_border);
}else{
photoview.setBackgroundDrawable(null);
}
break;
}
v.layout(left, top, right, bottom);
System.out.println("left===" + left);
System.out.println("top===" + top);
}
}
}