OK, ich hab' jetzt selbst mal herumgewerkelt und es funktioniert endlich.
Das Interface in der View-Klasse, die die Bitmap beinhaltet darf dort anscheinend nicht sein bzw. "zeigt" auf nichts (NullpointerExeption).
Ich hab es wie folgt gelöst, für welche, die das selbe/ein ähnliches Problem haben wie ich:
Ich hab einen OnTouchListener in meinem Fragment implementiert. Dieser sieht dann in der View-Klasse nach, ob die Kooridaten mit denen der Bitmap übereinstimmen und erhält dann 1 für "ja" und 0 für "nein" zurück(Methode: int woClick()). Dann gehts im Fragment ganz normal über ein Interface weiter.
Der Code:
View-Klasse:
package com.mwittig98gmail.derberater.BitmapViews;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import com.mwittig98gmail.derberater.R;
import java.text.DecimalFormat;
import java.util.logging.LogRecord;
/**
* Created by Mathias on 18.07.2015.
*/
public class Karte extends View {
Bitmap land;
Touch mOnTouched;
int touched = 0;
public Karte(Context context) {
super(context);
land = BitmapFactory.decodeResource(getResources(), R.drawable.karte_test);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(land, 0, 260, null);
}
public int woClick(int x,int y){
int wo = 0;
y=y-260;
if(y<land.getHeight()&&y>=0) {
if (land.getPixel(x, y) != 0) {
wo = 1;
} else {
wo = 0;
}
}
return wo;
}
public interface Touch{
void touched(int i);
}
}
Die Fragment-Klasse
package com.mwittig98gmail.derberater.Fragments;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import com.mwittig98gmail.derberater.BitmapViews.Karte;
import com.mwittig98gmail.derberater.R;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
* {@link KarteFragment.OnFragmentInteractionListener} interface
* to handle interaction events.
* Use the {@link KarteFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class KarteFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
//Interface
OnFragmentInteractionListener mListener;
//View fuer OnClick()
View view;
//Grafische Karte
public Karte karte;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment KarteFragment.
*/
// TODO: Rename and change types and number of parameters
public static KarteFragment newInstance(String param1, String param2) {
KarteFragment fragment = new KarteFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
public KarteFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_karte, container, false);
//view.findViewById(R.id.groud0);
karte = new Karte(getActivity());
FrameLayout frameLayout = (FrameLayout)view.findViewById(R.id.groud0);
frameLayout.addView(karte);
String s = "Karte";
// mListener.ueberschrift(s);
/*
Button b1 = (Button)view.findViewById(R.id.i1);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(1);
mListener.ueberschrift(1+"");
}
});
//
Button b2 = (Button)view.findViewById(R.id.i2);
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(2);
mListener.ueberschrift(2+"");
}
});
//
Button b3 = (Button)view.findViewById(R.id.i3);
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(3);
mListener.ueberschrift(3+"");
}
});
//
Button b4 = (Button)view.findViewById(R.id.i4);
b4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(4);
mListener.ueberschrift(4+"");
}
});
//
Button b5 = (Button)view.findViewById(R.id.i5);
b5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(5);
mListener.ueberschrift(5+"");
}
});
//
Button b6 = (Button)view.findViewById(R.id.i6);
b6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(6);
mListener.ueberschrift(6+"");
}
});
//
Button b7 = (Button)view.findViewById(R.id.i7);
b7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(7);
mListener.ueberschrift(7+"");
}
});
//
Button b8 = (Button)view.findViewById(R.id.i8);
b8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(8);
mListener.ueberschrift(8 +"");
}
});
*/
//view = view.findViewById(R.id.groud0);
// View v = new Karte(getActivity());
karte.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
int click = 0;
click = karte.woClick(x,y);
//touched = 0;
mListener.onFragmentInteraction(click);
return true;
}
});
return view;
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(0);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
* <p/>
* See the Android Training lesson <a href=
* >Communicating with Other Fragments</a> for more information.
*/
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(int i);
void ueberschrift(String s);
}
}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.