转载请声明出处,谢谢!http://www.cnblogs.com/linguanh/
先上效果图,给大家个直观效果,后上实现代码:
->
->
->
ok,现在简单说下我上面的图片被做了什么操作,长按“休闲场所”,然后代码实现 震动,告诉用户,现在可以移动了,然后我把它和“海滨沿岸” 互换位置,注意此时的 图片是 半透明的,这些都是自定义特效,可以任意改。
代码来了:
这里我先给出,布局文件不含(ViewPager),这个根据个人修改的。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:background="@color/common_bg"
>
<LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerInParent="true">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RelativeLayout
android:id="@+id/rl1"
android:layout_width="160dp"
android:layout_height="160dp"
android:clickable="true"
android:background="@drawable/one">
<ImageView
android:id="@+id/img1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="30dp"
android:contentDescription="@string/hello"/>
<RelativeLayout
android:alpha="0.4"
android:background="#000000"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_height="20dp">
<TextView
android:id="@+id/tv1"
android:alpha="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textSize="@dimen/text_normal_size"
android:singleLine="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl2"
android:layout_width="160dp"
android:layout_height="160dp"
android:layout_marginLeft="5dp"
android:clickable="true"
android:background="@drawable/two">
<ImageView
android:id="@+id/img2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="30dp"
android:contentDescription="@string/hello"/>
<RelativeLayout
android:alpha="0.4"
android:background="#000000"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_height="20dp">
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textSize="@dimen/text_normal_size"
android:singleLine="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</RelativeLayout>
</LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:orientation="horizontal">
<RelativeLayout
android:id="@+id/rl3"
android:layout_width="160dp"
android:layout_height="160dp"
android:clickable="true"
android:background="@drawable/three">
<ImageView
android:id="@+id/img3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="30dp"
android:contentDescription="@string/hello"/>
<RelativeLayout
android:alpha="0.4"
android:background="#000000"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_height="20dp">
<TextView
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textSize="@dimen/text_normal_size"
android:singleLine="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</RelativeLayout> <RelativeLayout
android:id="@+id/rl4"
android:layout_width="160dp"
android:layout_height="160dp"
android:layout_marginLeft="5dp"
android:clickable="true"
android:background="@drawable/four">
<ImageView
android:id="@+id/img4"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="30dp"
android:contentDescription="@string/hello"/>
<RelativeLayout
android:alpha="0.4"
android:background="#000000"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_height="20dp">
<TextView
android:id="@+id/tv4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textSize="@dimen/text_normal_size"
android:singleLine="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</RelativeLayout>
</LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:orientation="horizontal">
<RelativeLayout
android:id="@+id/rl5"
android:layout_width="160dp"
android:layout_height="160dp"
android:clickable="true"
android:background="@drawable/backg">
<ImageView
android:id="@+id/img5"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="30dp"
android:contentDescription="@string/hello"/>
<RelativeLayout
android:alpha="0.4"
android:background="#000000"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_height="20dp">
<TextView
android:id="@+id/tv5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textSize="@dimen/text_normal_size"
android:singleLine="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl6"
android:layout_width="160dp"
android:layout_height="160dp"
android:layout_marginLeft="5dp">
<RelativeLayout
android:id="@+id/rl7"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:layout_marginBottom="5dp"
android:clickable="true"
android:background="@drawable/five">
<ImageView
android:id="@+id/img7"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:contentDescription="@string/hello"/>
<RelativeLayout
android:alpha="0.4"
android:background="#000000"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_height="20dp">
<TextView
android:id="@+id/tv7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textSize="@dimen/text_normal_size"
android:singleLine="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl8"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_below="@id/rl7"
android:layout_alignParentLeft="true"
android:clickable="true"
android:background="@drawable/six">
<ImageView
android:id="@+id/img8"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_centerInParent="true"
android:contentDescription="@string/hello"/>
<RelativeLayout
android:alpha="0.4"
android:background="#000000"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_height="20dp">
<TextView
android:id="@+id/tv8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textSize="@dimen/text_little_size"
android:singleLine="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</RelativeLayout> <RelativeLayout
android:id="@+id/rl9"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_below="@id/rl7"
android:layout_alignParentRight="true"
android:clickable="true"
android:background="@drawable/seven">
<ImageView
android:id="@+id/img9"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_centerInParent="true"
android:contentDescription="@string/hello"/>
<RelativeLayout
android:alpha="0.4"
android:background="#000000"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_height="20dp">
<TextView
android:id="@+id/tv9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textSize="@dimen/text_little_size"
android:singleLine="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
这里再给出,里面的动画xml,可能有读者会需要到
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="1.0"
android:toAlpha="0.1"
android:duration="500"
android:repeatCount="1"
android:repeatMode="reverse"
/>
<scale
android:fromXScale="1.0"
android:toXScale="0.8"
android:fromYScale="1.0"
android:toYScale="0.8"
android:pivotX="50%"
android:pivotY="50%"
android:duration="500"
android:repeatCount="1"
android:repeatMode="reverse"
android:interpolator="@android:anim/linear_interpolator"
/>
</set>
java代码:
使用前需要知道,由于我是把这个页面 装载 在 viewPager 里面的,它是一个 fragment,本身 viewPager 有 onTouchEvent 事件,即可以左右侧滑,所以,当我在 这个页面里,长按图片试图拖动它的时候,就会造成 viewPager 和 子页面 长按滑动 冲突问题,嗯,是的。不过我已经把这个问题解决了,方法请见我的另外一篇博文链接http://www.cnblogs.com/linguanh/p/4540099.html
代码里面一些必要的注释,我已详细给出,相信能帮助大家理解。
package com.LGH.weixin; import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast; /**
* Created by Administrator on 2015/5/25.
*/
public class apartFragment extends Fragment implements OnTouchListener, OnClickListener, OnLongClickListener, Animation.AnimationListener{ View main;
View mainActivity;//为了改变 主页面的viewPager 而设置 myViewPager temp;
Activity myActivity = new Activity();
//MainActivity in_order_to_forbid_viewPager_slip = new MainActivity(); private WindowManager windowManager;
private WindowManager.LayoutParams windowParams;
private View animationView; //当前单次点击播放动画的 view public static int displayWidth; //屏幕宽度
public static int displayHeight; //屏幕高度 // 标志长按控件动作是否激活
private boolean isMove = false;
private boolean isAnimotionFinish = false; private ImageView dragImageView; // 被拖动控件的preview
private int fromPoint = -1;//记录被拖动的View
private int toPoint = -1;//记录停止拖动时被碰撞的View
private Drawable temp_img;//缓存被拖动控件的ImageView的内容
private Drawable temp_view_img;//缓存被拖动控件的 View的内容
private Drawable temp_view_img_topoint;//缓存被拖动控件 经过 的 View的内容
private int[] relativeLayout_bgs = //最终只能通过它来解决 在拖动小图经过大图过程中,经过的大图被失真的问题
new int[]{R.drawable.one,R.drawable.two,R.drawable.three,R.drawable.four,R.drawable.backg,R.drawable.five,R.drawable.six,R.drawable.seven}; private String temp_str;//缓存被拖动控件的TextView的内容 //移动的位置
private int dragPointX;
private int dragPointY;
//当前位置距离边界的位置
private int dragOffsetX;
private int dragOffsetY;
private int x, y;
//用于循环碰撞的数组
private View[] views = new View[8];
private TextView[] tvs = new TextView[8];
private ImageView[] ivs = new ImageView[8];
//用来显示经纬度、发包数
private TextView bottom_bar_up, bottom_bar_down;
//用于记录碰撞的面积
//图标出现和消失的过度动画
private Animation flash;
// private Animation disappear;
private Animation blink;
private Animation original;
/*
* 用于记录所有View的坐标的二位数组
* points[0][0]用于记录左上角的X
* points[0][1]用于记录左上角的Y
* points[0][2]用于记录右下角的X
* points[0][3]用于记录右下角的Y
*/
private int[][] points = new int[8][4]; @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
main = inflater.inflate(R.layout.apart_center,container,false);
mainActivity = inflater.inflate(R.layout.activity_main,container,false); myActivity = getActivity(); //temp = (myViewPager) mainActivity.findViewById(R.id.vp);
//temp = in_order_to_forbid_viewPager_slip.getVP();
//temp.requestDisallowInterceptTouchEvent(true);
//temp.setStopViewPagerSlip(false); initView(main);//初始化页面 for(int i = 0; i < views.length; i++){
views[i].setOnClickListener(this);//绑定点击(短按)监听器
views[i].setOnLongClickListener(this);//绑定长按监听器
views[i].setOnTouchListener(this);//绑定触摸监听器
}
flash = AnimationUtils.loadAnimation(getActivity(), R.anim.flash); //自定义缩放动画
//disappear = AnimationUtils.loadAnimation(this, R.anim.disappear);
blink = AnimationUtils.loadAnimation(getActivity(), R.anim.blink);
original = AnimationUtils.loadAnimation(getActivity(), R.anim.original); return main; } //触摸监听器 @Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
x = (int) event.getX();
y = (int) event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
if(points[0][0] == 0){
initPoints();
}
break;
case MotionEvent.ACTION_MOVE: if(isMove){
if(dragImageView == null){ dragPointX = x;
dragPointY = y;
dragOffsetX = (int)event.getRawX() - x;
dragOffsetY = (int)event.getRawY() - y;
//移动细节的 logcat 记录
Log.v("getX", String.valueOf(x) + "=====" + String.valueOf(event.getX()));
Log.v("getY", String.valueOf(y) + "=====" + String.valueOf(event.getY()));
Log.v("getLeft", String.valueOf(v.getLeft()) + "=====" + String.valueOf(event.getX()-v.getLeft()));
Log.v("getgetTop", String.valueOf(v.getTop()) + "=====" + String.valueOf(event.getY()-v.getTop()));
Log.v("getRawX", String.valueOf(event.getRawX()) + "=====" + String.valueOf(event.getRawX() - event.getX()));
Log.v("getRawY", String.valueOf(event.getRawY()) + "=====" + String.valueOf(event.getRawY() - event.getY())); v.destroyDrawingCache();
v.setDrawingCacheEnabled(true);
v.setDrawingCacheBackgroundColor(0x000000);
Bitmap bm = Bitmap.createBitmap(v.getDrawingCache(true));
Bitmap bitmap = Bitmap.createBitmap(bm, 8, 8, bm.getWidth()-8, bm.getHeight()-8);
startDrag(bitmap, x, y); //实时生成 拖动效果,参数一是 当前图片,x y为目标标
// v.startAnimation(blink);
v.setVisibility(View.INVISIBLE);//隐藏当前被长按的控件
Log.v("OnTouch>>>>", "===隐藏!!!");
}else{
onDrag(x, y);
hide();
Log.v("OnTouch>>>>", "===动了!!!");
}
}else{
Log.v("OnTouch>>>>", "===不移动");
}
break;
case MotionEvent.ACTION_UP:
//if(!isMove){ // //}
isMove = false;
stopDrag();
// fromPoint = -1;
// toPoint = -1;
show();
exchange(); break;
}
return false;
}
/**
* 长按监听器
*/
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
Log.v("onLongClick>>>>>", "LongClick");
for(int i = 0; i < views.length; i ++){
if(v.equals(views[i])){
fromPoint = i;
isMove = true;
getZhenDong.Vibrate(getActivity(), 100);//震动提醒 //temp.requestDisallowInterceptTouchEvent(true); //这个阻止申请的函数必须放在 onTouchListener 里面
// 在 该 fragment 长按,先去掉 viewPager 的侧滑,防止冲突
// requestDisallowInterceptTouchEvent(true); 在主页面可以实现,在这里还是不行,妈的
main.getParent().requestDisallowInterceptTouchEvent(true); //终于!!!,这样可以 //temp.setStopViewPagerSlip(false);//这样也是不行,fuck the dog ! temp_img = ivs[i].getDrawable();//初始化被拖动的View的 ImageView的缓存
temp_view_img = views[i].getBackground();
temp_str = tvs[i].getText().toString();//初始化被拖动的View的TextView的缓存 return true;
}
}
return true;
}
/**
* 短按监听器
*/
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
animationView = v;
Animation temp = AnimationUtils.loadAnimation(getActivity(), R.anim.flash);
v.startAnimation(temp); //设置单点 时播放缩放动画
for(int i = 0; i < views.length; i++){
views[i].setOnClickListener(null);//一次点击后,移除所有的监听事件
}
temp.setAnimationListener(this);
//跳转 操作 放置 动画 播放完毕的 监听里面,实现 播放完 动画 再 跳转 }
@Override
public void onAnimationStart(Animation animation) {
if (isAnimotionFinish) {
isAnimotionFinish = false;
}
} @Override
public void onAnimationEnd(Animation animation) {
isAnimotionFinish = true;
for (int i = 0; i < views.length; i++) {
views[i].setOnClickListener(this);//恢复监听
}
Toast.makeText(getActivity(), "finish animation", Toast.LENGTH_LONG).show();
for (int i = 0; i < views.length; i++) {
Intent readToJump = new Intent(myActivity,infoMain.class);
startActivity(readToJump);
}
} @Override
public void onAnimationRepeat(Animation animation) { } /**
* 初始化页面所有控件
*/
private void initView(View view){ //获取屏幕分辨率
DisplayMetrics displayMetrics = new DisplayMetrics();
myActivity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
displayWidth = displayMetrics.widthPixels;
displayHeight = displayMetrics.heightPixels;
//-------------下面的 ImageView 已被我 废弃,大家可以 根据自己需求,使用它 ------------- views[0] = (RelativeLayout) view.findViewById(R.id.rl1);
tvs[0] = (TextView) view.findViewById(R.id.tv1);
ivs[0] = (ImageView) view.findViewById(R.id.img1); views[1] = (RelativeLayout) view.findViewById(R.id.rl2);
tvs[1] = (TextView) view.findViewById(R.id.tv2);
ivs[1] = (ImageView) view.findViewById(R.id.img2); views[2] = (RelativeLayout) view.findViewById(R.id.rl3);
tvs[2] = (TextView) view.findViewById(R.id.tv3);
ivs[2] = (ImageView) view.findViewById(R.id.img3); views[3] = (RelativeLayout) view.findViewById(R.id.rl4);
tvs[3] = (TextView) view.findViewById(R.id.tv4);
ivs[3] = (ImageView) view.findViewById(R.id.img4); views[4] = (RelativeLayout) view.findViewById(R.id.rl5);
tvs[4] = (TextView) view.findViewById(R.id.tv5);
ivs[4] = (ImageView) view.findViewById(R.id.img5); views[5] = (RelativeLayout) view.findViewById(R.id.rl7);//1/2大小的relativelayout
tvs[5] = (TextView) view.findViewById(R.id.tv7);
ivs[5] = (ImageView) view.findViewById(R.id.img7); views[6] = (RelativeLayout) view.findViewById(R.id.rl8);//1/4大小的relativelayout
tvs[6] = (TextView) view.findViewById(R.id.tv8);
ivs[6] = (ImageView) view.findViewById(R.id.img8); views[7] = (RelativeLayout) view.findViewById(R.id.rl9);//1/4大小的relativelayout
tvs[7] = (TextView) view.findViewById(R.id.tv9);
ivs[7] = (ImageView) view.findViewById(R.id.img9); //bottom_bar_up = (TextView)main.findViewById(R.id.bottom_bar_up);
//bottom_bar_down = (TextView)main.findViewById(R.id.bottom_bar_down); int[] power = {0, 1, 2, 3, 4, 5, 6, 7};
for(int i = 0; i < power.length; i++){
switch (power[i]){
case 7:
tvs[i].setText(getText(R.string.folder));
break;
case 6:
tvs[i].setText(getText(R.string.person_info));
break;
case 5:
tvs[i].setText(getText(R.string.system_info));
break;
case 4:
tvs[i].setText(getText(R.string.hidden_danger_report));
break;
case 3:
tvs[i].setText(getText(R.string.open));
break;
case 2:
tvs[i].setText(getText(R.string.qr_code));
break;
case 1:
tvs[i].setText(getText(R.string.work_order));
break;
case 0:
tvs[i].setText(getText(R.string.routing_inspection));
break;
} }
}
/**
* 生成被拖动控件的preView
*/
private void startDrag(Bitmap bm, int x, int y)
{
Log.v("startDrag>>>>>>", "startDrag");
stopDrag();
windowParams = new WindowManager.LayoutParams();
windowParams.gravity = Gravity.TOP | Gravity.LEFT; //左上角相对于屏幕的坐标
windowParams.x = x - dragPointX + dragOffsetX;
windowParams.y = y - dragPointY + dragOffsetY - 40; windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.alpha = 0.5f; ImageView iv = new ImageView(myActivity);
iv.setImageBitmap(bm);
windowManager = (WindowManager) myActivity.getSystemService(Context.WINDOW_SERVICE);
windowManager.addView(iv, windowParams); dragImageView = iv;
} /**
* 停止绘制,清空preView
*/
private void stopDrag()
{
if (dragImageView != null)
{
windowManager.removeView(dragImageView);
dragImageView = null;
Log.v("StopDrag>>>>>>>", "disappear");
}
} /**
* 拖动(Move)过程中不断调整preView的位置,以呈现拖动的效果
*/
private void onDrag(int x, int y) {
Log.v("onDrag>>>>>>", "onDrag");
if (dragImageView != null) {
windowParams.alpha = 0.5f; windowParams.x = x - dragPointX + dragOffsetX;
windowParams.y = y - dragPointY + dragOffsetY - 40; Log.v("x", String.valueOf(x));
Log.v("y", String.valueOf(y));
Log.v("windowParams.x", String.valueOf(windowParams.x));
Log.v("windowParams.y", String.valueOf(windowParams.y));
windowManager.updateViewLayout(dragImageView, windowParams);
}
} /**
* 返回参数View的相对屏幕的绝对坐标值
* point[0]用于记录左上角的X
* point[1]用于记录左上角的Y
* point[2]用于记录右下角的X
* point[3]用于记录右下角的Y
*/
private int[] getPoint(View v){
int point[] = new int[4];
v.getLocationOnScreen(point);
point[2] = point[0] + v.getWidth();
point[3] = point[1] + v.getHeight();
for(int i = 0; i < point.length; i++){
System.out.println("point[" + i + "]::::::" + point[i]);
} return point;
}
/**
* 返回被拖动View的中心的坐标
*/
private int[] getCentroPoint(View v){
int point[] = new int[2];
if(v != null){
point = new int[2];
v.getLocationOnScreen(point);
point[0] = point[0] + v.getWidth()/2;
point[1] = point[1] + v.getHeight()/2;
for(int i = 0; i < point.length; i++){
System.out.println("point[" + i + "]::::::" + point[i]);
}
}
return point;
} /**
* 判断被拖动的View的中心点在哪个View内部,就把哪个View隐藏
*/
private void hide(){
int point[] = getCentroPoint(dragImageView);
for(int i = 0; i < views.length; i++){
if(point[0] > points[i][0] && point[1] > points[i][1] && point[0] < points[i][2] && point[1] < points[i][3]){
if(views[i].isShown()){
toPoint = i;
//temp_view_img_topoint = views[i].getBackground(); onExchange();//将被拖拽的View的原始位置的数据设置为被覆盖的View的数据 views[i].setVisibility(View.INVISIBLE);
}
// if(views[i].getAnimation() == null){
// views[i].startAnimation(blink);
// toPoint = i;
// }
}else{
// if(views[i].getAnimation() != null && !views[i].getAnimation().equals(original)){
// views[i].startAnimation(original);
// }
// views[i].clearAnimation();
// views[i].invalidate();
// toPoint = -1;
if(toPoint == i){
toPoint = -1;
onExchange();//将被拖拽的View的原始位置的数据恢复初始数据
}
if(!views[i].isShown()){
//Toast.makeText(this,i+"--",Toast.LENGTH_LONG).show();
views[i].setVisibility(View.VISIBLE);
//views[i].setBackground(temp_view_img_topoint);
}
}
}
//temp.requestDisallowInterceptTouchEvent(false); //恢复 viewPager 的可侧滑
}
/**
* 拖动结束,将所有的View都显示出来
*/
private void show(){
for(int i = 0; i < views.length; i++){
if(!views[i].isShown()){
// toPoint = i;
views[i].setVisibility(View.VISIBLE);
views[i].startAnimation(flash);
}
views[i].setVisibility(View.VISIBLE);
// if(views[i].getAnimation() != null && !views[i].getAnimation().equals(flash)){
// views[i].startAnimation(flash);
// }
}
}
/**
* 初始化所有View的坐标并存放到8行4列的二维数组point[8][4]
*/
private void initPoints(){
for(int i = 0; i < points.length; i++){
points[i] = getPoint(views[i]);
}
}
/**
* 拖拽结束,将fromView和toView的内容进行交换
* @return 交换返回true,不交换返回false
*/
private boolean exchange(){
if(fromPoint != -1 && toPoint != -1 && fromPoint != toPoint ){
tvs[fromPoint].setText(tvs[toPoint].getText());
//ivs[fromPoint].setImageDrawable(ivs[toPoint].getDrawable());
views[fromPoint].setBackground(views[toPoint].getBackground()); tvs[toPoint].setText(temp_str);
//ivs[toPoint].setImageDrawable(temp_img);
views[toPoint].setBackground(temp_view_img); views[fromPoint].startAnimation(flash);
// temp = toPoint;
fromPoint = -1;
toPoint = -1;
return true;
}else{
fromPoint = -1;
toPoint = -1;
return false;
} }
/**
* 用于正在被拖动View的原始位置的内容的实时交换
*/
private void onExchange(){
if(fromPoint != -1 && toPoint != -1 && fromPoint != toPoint ){ //将被拖拽的View的原始位置的数据, 设置为, 被覆盖的View的数据
//Toast.makeText(this,fromPoint+"--"+toPoint,Toast.LENGTH_LONG).show();
tvs[fromPoint].setText(tvs[toPoint].getText());
//ivs[fromPoint].setImageDrawable(ivs[toPoint].getDrawable());
//views[fromPoint].setBackgroundResource(views[fromPoint].getDrawable(R.drawable.two)); // 不适用 getBackground() 传入,会造成大图失真
views[fromPoint].setBackground(getResources().getDrawable(relativeLayout_bgs[toPoint]));//实现拖曳过程中的实时互换
//views[toPoint].setBackground(views[fromPoint].getBackground()); views[fromPoint].startAnimation(blink); }else{
//Toast.makeText(this,fromPoint+"--"+toPoint,Toast.LENGTH_LONG).show();
//将被拖拽的View的原始位置的数据恢复初始数据
tvs[fromPoint].setText(temp_str);
//ivs[fromPoint].setImageDrawable(temp_img);
views[fromPoint].setBackground(temp_view_img);
}
}
/**
* 用来显示更新bottom_bar中的数据
*/
private void updateBottomBar(int sendPackageNo, int rate, double longitude, double dimension){
//在这里可以设置 footer 文本
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
SharedPreferences preferences = myActivity.getSharedPreferences("system_config", myActivity.MODE_PRIVATE);
boolean isChanged = preferences.getBoolean("theme_value", true);
SharedPreferences.Editor editor = preferences.edit();
switch (item.getItemId()) {
case R.id.menu_settings: { if (isChanged) {
isChanged = false;
} else {
isChanged = true;
}
editor.putBoolean("theme_value", isChanged);
editor.commit();
break;
}
}
return super.onOptionsItemSelected(item);
} }
打完收工,有问题请留言。