android - 无法转换为 android.widget.RelativeLayout

标签 android drag-and-drop drag

package com.example.caneraydin.myapplication;

import android.annotation.SuppressLint;
import android.content.ClipData;
import android.graphics.drawable.Drawable;
import android.media.Image;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity   {

    private ImageView img1,img2,img3;
String TAG = "Chic";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_lands);
        img1 = (ImageView) findViewById(R.id.img1);
        img2= (ImageView) findViewById(R.id.img2);
        img3= (ImageView) findViewById(R.id.img3);

       img3. setOnTouchListener(new MyTouchListener());
img2. setOnDragListener(new MyDragListener());
    }



}
 final class MyTouchListener implements View.OnTouchListener {String TAG = "Chic";
    // Log.d(TAG,"In mytouchlistener");
    public boolean onTouch(View view, MotionEvent motionEvent) {
        Log.d(TAG,"In mytouchlistener");
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            Log.d(TAG,"In mytouchlistener if yes");
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(data, shadowBuilder, view, 0);
          //  view.setVisibility(View.INVISIBLE);
            return true;
        } else {
            return false;
        }
    }
}


class MyDragListener implements View.OnDragListener {

    String TAG = "Chic";
    @Override
    public boolean onDrag(View v, DragEvent event) {
        int action = event.getAction();
        switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
                // do nothing

                Log.d(TAG,"drag startedr");
                break;
            case DragEvent.ACTION_DROP: Log.d(TAG,"drag drop");
                // Dropped, reassign View to ViewGroup
                View view = (View) event.getLocalState();
                ViewGroup owner = (ViewGroup) view.getParent();
                owner.removeView(view);
                RelativeLayout container = (RelativeLayout) v;
                container.addView(view);
            //    view.setVisibility(View.VISIBLE);
                break;
            case DragEvent.ACTION_DRAG_ENDED: Log.d(TAG,"drag ended");

            default:
                break;
        }
        return true;
    }
}

我有 3 个 ImageView 。当一个人将继续另一个 ImageView 时,它应该给出消息。但即使我不能放弃 imageview。当我下降时,它会回到第一位。

它不能进入​​ action.drop 部分。当我按照我的描述将图像拖放到另一个图像时,它会关闭并显示消息:

   java.io.IOException: fcntl failed: EAGAIN (Try again)
                                                                     at java.nio.FileChannelImpl.basicLock(FileChannelImpl.java:123)
                                                                     at java.nio.FileChannelImpl.tryLock(FileChannelImpl.java:177)
                                                                     at java.nio.channels.FileChannel.tryLock(FileChannel.java:587)
                                                                     at com.facebook.analytics.reporters.AppStateReporter.a(AppStateReporter.java:141)
                                                                     at com.facebook.analytics.reporters.AppStateReporter.c(AppStateReporter.java:94)
                                                                     at com.facebook.analytics.reporters.AppStateReporter.a(AppStateReporter.java:55)
                                                                     at com.facebook.common.noncriticalinit.NonCriticalInitializer.a(NonCriticalInitializer.java:103)
                                                                     at com.facebook.common.noncriticalinit.NonCriticalInitializer$2.run(NonCriticalInitializer.java:116)
                                                                     at com.facebook.common.appchoreographer.DefaultAppChoreographer$5.run(DefaultAppChoreographer.java:384)
                                                                     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
                                                                     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
                                                                     at com.facebook.common.executors.WrappingExecutorService$1.run(WrappingExecutorService.java:77)
                                                                     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
                                                                     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                     at com.facebook.common.executors.DefaultConstrainedListeningExecutorService$Worker.run(DefaultConstrainedListeningExecutorService.java:327)
                                                                     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                                     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                                     at com.facebook.common.executors.NamedThreadFactory$1.run(NamedThreadFactory.java:42)
                                                                     at java.lang.Thread.run(Thread.java:841)
                                                                  Caused by: libcore.io.ErrnoException: fcntl failed: EAGAIN (Try again)
                                                                     at libcore.io.Posix.fcntlFlock(Native Method)
                                                                     at libcore.io.ForwardingOs.fcntlFlock(ForwardingOs.java:54)
                                                                     at java.nio.FileChannelImpl.basicLock(FileChannelImpl.java:121)
                                                                     at java.nio.FileChannelImpl.tryLock(FileChannelImpl.java:177) 
                                                                     at java.nio.channels.FileChannel.tryLock(FileChannel.java:587) 
                                                                     at com.facebook.analytics.reporters.AppStateReporter.a(AppStateReporter.java:141) 
                                                                     at com.facebook.analytics.reporters.AppStateReporter.c(AppStateReporter.java:94) 
                                                                     at com.facebook.analytics.reporters.AppStateReporter.a(AppStateReporter.java:55) 
                                                                     at com.facebook.common.noncriticalinit.NonCriticalInitializer.a(NonCriticalInitializer.java:103) 
                                                                     at com.facebook.common.noncriticalinit.NonCriticalInitializer$2.run(NonCriticalInitializer.java:116) 
                                                                     at com.facebook.common.appchoreographer.DefaultAppChoreographer$5.run(DefaultAppChoreographer.java:384) 
                                                                     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
                                                                     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                                                                     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
                                                                     at com.facebook.common.executors.WrappingExecutorService$1.run(WrappingExecutorService.java:77) 
                                                                     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
                                                                     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                                                                     at com.facebook.common.executors.DefaultConstrainedListeningExecutorService$Worker.run(DefaultConstrainedListeningExecutorService.java:327) 
                                                                     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                                                                     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                                                                     at com.facebook.common.executors.NamedThreadFactory$1.run(NamedThreadFactory.java:42) 
                                                                     at java.lang.Thread.run(Thread.java:841) 
03-28 16:12:56.569 157-376/? E/cutils: Failed to mkdirat(/storage/extSdCard/Android): Read-only file system
03-28 16:12:56.589 157-376/? E/cutils: Failed to mkdirat(/storage/extSdCard/Android): Read-only file system
03-28 16:12:57.109 25075-13896/? E/fb4a(:<default>):VaultDeviceSetup: setupDeviceFromServer
                                                                      com.facebook.proxygen.HttpNetworkException: connect failed (immediately): errno = 101
                                                                          at com.facebook.proxygen.LigerHttpResponseHandler.handleError(LigerHttpResponseHandler.java:244)
                                                                          at com.facebook.proxygen.LigerHttpResponseHandler.onError(LigerHttpResponseHandler.java:209)
                                                                          at com.facebook.proxygen.JniHandler.onError(JniHandler.java:106)
                                                                          at com.facebook.proxygen.EventBase.loopForever(Native Method)
                                                                          at com.facebook.proxygen.HTTPThread.run(HTTPThread.java:32)
                                                                          at java.lang.Thread.run(Thread.java:841)
03-28 16:12:58.080 157-376/? E/cutils: Failed to mkdirat(/storage/extSdCard/Android): Read-only file system
03-28 16:12:58.090 157-376/? E/cutils: Failed to mkdirat(/storage/extSdCard/Android): Read-only file system
03-28 16:12:58.090 157-376/? E/cutils: Failed to mkdirat(/storage/extSdCard/Android): Read-only file system
03-28 16:12:58.100 157-376/? E/cutils: Failed to mkdirat(/storage/extSdCard/Android): Read-only file system
03-28 16:12:58.541 978-978/? E/NetworkScheduler.SchedulerReceiver: Invalid parameter app
03-28 16:12:58.541 978-978/? E/NetworkScheduler.SchedulerReceiver: Invalid package name : Perhaps you didn't include a PendingIntent in the extras?
03-28 16:13:10.763 589-864/? E/Watchdog: !@Sync 6168
03-28 16:13:19.091 13687-13687/com.example.caneraydin.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                      Process: com.example.caneraydin.myapplication, PID: 13687
                                                                                      java.lang.ClassCastException: android.support.v7.widget.AppCompatImageView cannot be cast to android.widget.RelativeLayout
                                                                                          at com.example.caneraydin.myapplication.MyDragListener.onDrag(MainActivity.java:74)
                                                                                          at android.view.View.dispatchDragEvent(View.java:17624)
                                                                                          at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1288)
                                                                                          at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1288)
                                                                                          at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1288)
                                                                                          at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1288)
                                                                                          at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1288)
                                                                                          at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1288)
                                                                                          at android.view.ViewRootImpl.handleDragEvent(ViewRootImpl.java:5250)
                                                                                          at android.view.ViewRootImpl.access$900(ViewRootImpl.java:115)
                                                                                          at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3462)
                                                                                          at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                          at android.os.Looper.loop(Looper.java:136)
                                                                                          at android.app.ActivityThread.main(ActivityThread.java:5584)
                                                                                          at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                          at java.lang.reflect.Method.invoke(Method.java:515)
                                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
                                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
                                                                                          at dalvik.system.NativeStart.main(Native Method)
03-28 16:13:19.431 589-14357/? E/android.os.Debug: !@Dumpstate > sdumpstate -k -t -z -d -m 13687 -o /data/log/dumpstate_app_error
03-28 16:13:20.192 14380-14380/? E/dalvikvm: Could not find class 'android.app.job.JobScheduler', referenced from method com.android.email.service.r.a
03-28 16:13:20.192 14380-14380/? E/dalvikvm: Could not find class 'android.app.job.JobScheduler', referenced from method com.android.email.service.r.b
03-28 16:13:20.793 14380-14426/? E/Gmail: Error finding the version of the Email provider.....
                                          android.content.pm.PackageManager$NameNotFoundException: com.google.android.email
                                              at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:124)
                                              at com.google.android.gm.EmailMigrationService.a(SourceFile:1280)
                                              at com.google.android.gm.EmailMigrationService.onHandleIntent(SourceFile:219)
                                              at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                              at android.os.Looper.loop(Looper.java:136)
                                              at android.os.HandlerThread.run(HandlerThread.java:61)
03-28 16:13:22.805 1810-1810/? E/SamsungIME:          isHWKeyboardConnected() = false --> false
03-28 16:13:22.885 589-589/? E/Tethering: No numeric data
03-28 16:13:24.756 589-697/? E/ViewRootImpl: sendUserActionEvent() mView == null
03-28 16:13:24.766 589-2654/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
03-28 16:13:24.766 589-2654/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
03-28 16:13:24.766 1810-1810/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
03-28 16:13:24.766 1810-1810/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
03-28 16:13:24.816 589-715/? E/InputDispatcher: channel ~ Channel is unrecoverably broken and will be disposed!
03-28 16:13:40.772 589-864/? E/Watchdog: !@Sync 6169

这是我的xml(横向)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"


    tools:context="com.example.caneraydin.myapplication.MainActivity">


<ImageView
    android:layout_width="140dp"
    android:layout_height="140dp"
    android:src="@drawable/b3_1"
    android:layout_alignParentLeft="true"
    android:layout_centerInParent="true"
    android:id="@+id/img3"
    />



    <ImageView
        android:layout_width="140dp"
        android:layout_height="140dp"
        android:src="@drawable/b2_5"

        android:id="@+id/img2"
        android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
        />

    <ImageView
        android:layout_width="140dp"
        android:layout_height="140dp"
        android:src="@drawable/b3_2"
android:layout_alignRight="@id/img2"
       android:layout_above="@id/img2"
        android:id="@+id/img1"
android:layout_alignParentBottom="true"

         />

</RelativeLayout>

最佳答案

由于您在 ImageView img2 上设置了 OnDragListener,

中的 View v
public boolean onDrag(View v, DragEvent event) {

属于ImageView类型;所以问题是你试图在此处将 ImageView 转换为 RelativeLayout:

RelativeLayout container = (RelativeLayout) v;

关于android - 无法转换为 android.widget.RelativeLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36262924/

相关文章:

android - DevicePolicyManager 崩溃时检查 Activity 密码就足够了

Android SQLite修改后刷新 View 数据

android - Camera中添加Camera的Zoom控件

android - java.lang.ClassNotFoundException 与 com.google.android.gms.measurement.internal.UserAttributeParcel

Cordova WP8 应用程序 - 防止拖动视口(viewport)

android - Horizo​​ntal RecyclerView 项目居中

javascript - 从另一个 div 的内部拖放一个 div

Jquery 拖放切换新元素的可拖动元素

java - 如何在OSMDroid上实现可拖动的ExtendOverlayItem?

iOS拖动UIView,布效果